关于参数标识
不知道大家在工作中有没有遇到一种情况,你的同事A写了一个方法给你调用,然后你调用时不知道该传什么参数,然后这个同事A还很cao dan的居然不加班!你一脸茫然的看着这个方法,当你尝试传进去一个abc,结果代码就报错了,此时此刻你是不是很苦恼、很想把你同事A暴打一顿逼问他这个方法到底该传个啥进去?
那么有没有办法解决这个问题呢?答案就是让你的同事在参数上标识出参数期望接收的值是啥,代码如下:
def fun(a: list):
pass
通过在a参数后面跟上: list
可以标识出a参数期望传入一个list类型,相当于给a参数写了一个注释。
不过,在实际工作中更多的是用来标识自定义类的名称(如下图),这样标识出来,别人在调用你这个方法时就知道该传个什么东西进去了。
另外,如果你就是不听话,非得瞎传,那会怎样呢?
答案是不会怎样,因为这个标识并没有强限制,你瞎传进去本身并不会报错(只有当程序运行到要使用这个参数时,才可能会报错。),但如果你用的是Pychram写代码,那大概率会给你提示的传参类型不对的警告:
另外,参数标识还有一个好处,特别是依赖编译器提示的同学。比如下面的函数,我函数的功能是删除传进来的列表地一个值,但是我又忘记了list内置的删除方法是怎么写的了,那就可以通过将参数a标识为list,然后pychram就能知道参数a应该是个list,就可以给你提供代码提示了:
关于标识返回类型
又回到刚刚那个场景,自从暴打一顿同事A之后,我知道了他写的方法该怎么传参之后,问题又来了,那这个方法返回个啥呢?难道要自己运行一下代码,再打印type去看吗?这显然也不合理!(别问哪里不合理,反正我就是这么任性,把同事A再打一顿....)
然后,同事A默默的在函数名称后面加上了一句话,就解决了这个事情:
就是后面的-> list
这里的意思就是标识出fun函数会返回一个list,然后返回标识和参数标识其实都是差不多的用法,也可以返回自定义类。
关于函数的占位符
像pass
和...
都是函数的占位符,多数情况下是用来类中,当类的某个方法目前还未实现或者需要子类重写时,就可以用pass
或者...
来先占位,两者效果是一样的。
关于限制传参方式
某天,我写了一个方法,方法的参数有很多,同事A这个傻子在调用我的方法时,代码一直报错,查了很久,结果发现是他传参数的顺序错了,在我暴打他一顿之后,当机立断强制要求调用我的方法时必须通过关键字参数传参,这样就可以避免参数位置错误的情况。
通过在参数前一个位置加上一个 * 号,就可以强制规定 * 号后的所有参数都只能通过关键字参数传参,否则会报错, 使用时要注意别和*agr
和 **kwarg
的使用搞混了
然后在某一天,我突然想给同事A搞点事情(好孩子不要学),我把参数中的 * 号删除了,但我在最后一个位置加上了一个/,强制改为只能通过位置参数传参。
总结一下,*
代表是*
后的所有参数都必须通过关键字参数传参,而/
则是/
前的所有参数都必须通过位置参数传参,因此在使用时要注意位置不要写错了。
欢迎来到testingpai.com!
注册 关于