
💖作者简介:大家好,我是车神哥,府学路18号的车神🥇
⚡About—>车神:从寝室到实验室最快3分钟,最慢3分半(那半分钟其实是等红绿灯)
📝个人主页:车手只需要车和手,压力来自论文_府学路18号车神_CSDN博客
🥇 官方认证:人工智能领域优质创作者
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋⚡希望大家多多支持🤗~一起加油 😁
专栏
《Python》
最近发现有些东西长时间不用就要忘了,坚持每天复习总结一个小知识点吧~
- 函数的定义和调用
- 函数书写规范
- 文档字符串
- 函数注释
- 函数参数
- 位置参数
- 默认参数
- 关键字参数
所谓函数,就是一些语句的集合,并且可以多次执行。
函数可以在被调用的时候接受参数传入参数再执行内部模块,执行完毕会返回一个值或者多个值。
由此函数可以便捷的帮助开发最大化地实现重复使用核最小的代码冗余,俗称——造车轮。
Python中使用def关键字来定义函数:
def add(a, b):
return a+b
解释:
- 上述函数名为
add,传入的参数为a、b,写在括号内部,参数后面必须紧跟一个冒号,这是标准格式要求。 - 执行的函数体则是返回的
return a+b,如果要调用此函数,则只需写函数名加上括号,在括号内传入相应的参数即可
print(add(a=1, b=3))
4
如上调用,结果输出为4.
函数书写规范 文档字符串其实从这么久的学习以来,很大一方面都是在做解释,良好的书写方式既方便自己,同时也方便他人阅读。这也体现了一个开发者的素养。
同时在写函数的时候,也要写好注释,这也才能让你的车轮滚得更流畅。
就简单的拿内置函数print()来说,开发人员写的很清楚了,让所有人都能够一目了然的明白该如何传入参数和使用。
- 自定义函数应该提供合适的函数注释,让使用者更方便。
在Python中使用文档字符串
(DocString)可以提供对函数功能的说明,文档字符串储存在__doc__中。文档字符串必须出现在模块、类、方法或者函数内部的第一行。Python官方推荐所有的模块以及模块内部的类和方法均需有文档字符串,另外类的所有公共方法如构造函数(__init__)也应该提供文档字符串。
推荐使用三个双引号将文档字符串给括起来,如下:
for x, value in enumerate(st):
"""
这是一个循环
"""
print(x, value)
当然,也会存在一些不适,如果出现了反斜杠(/),需要在文档字符串前添加小写字母r,如r''''''This is a code.''''''。如果文档字符串出现了Unicode字符,则需要在字符串前添加一个小写字母u,如u''''''计算下面的数字。''''''。
注意事项:
- 第一行类似于单行文档字符串,用于表达总结性的信息,其后紧跟一个空行,最后给出详细解释
- 总结性的信息必须紧跟在开始三引号之后。
- 详细的描述信息的缩进也需要与三引号一致。
函数注释记住一点,注释写的越标准,越有利于后期修改与方便自己与他人。
除了文档字符串以外,Python3还有一个新功能:函数注释。
函数注释完全是一个可选的功能,它是以字典的形式储存在``annotations`中的,不会对函数本身造成影响。
模板示例如下:
def 函数名(参数名:"参数注释"="默认值", ...)-> "函数返回值注释":
函数体
具体地,我们将上面add函数改进一下:
def add(a: "Num.1"=0, b: "Num.2"=1)->int:
"""Add two numbers."""
return a + b
然后我们再调用一下上面的函数:
print(add())
1
如果不传入参数值,那么就会利用默认值进行计算。
函数参数 位置参数位置参数的意思就是在调用时,必须按照正确顺序传入参数,调用时的数量必须与函数的申明一致。
如,加法运算中的a和b,调用时必须要接受两个参数,此为位置参数。
有些函数的内部,比如有一些定值是不需要变化,或者有一些常量,为了简化调用方法,则将这些参数设置为默认参数,调用时不需要传入参数,直接使用内部参数值。
下面给出一个含有默认参数的函数示例:
def power(a, b=2):
return a ** b
调用参数:
print(power(3))
9
print(power(4))
16
当然默认参数也是可以赋值改变的:
print(power(3,3))
27
关键字参数
Python中包含两种关键字类型参数:
- 对于函数调用方,可以使用参数名传递参数值的参数
- 对于函数定义方,可以定义一个函数,这个参数类似于
**kwargs形式,这个函数会接收所有命名参数
如上面的power()中的b=2这就是第一种写法,下面给出第二种情况:
def example(*positional, **keywords):
print("Positional:", positional)
print("Keywords:", keywords)
调用一下:
example("one", "two", "three")
输出:
Positional: ('one', 'two', 'three')
Keywords: {}
从输出结果来看,*positional接收了所有的位置参数。
下面再试一下:
example(a = "jack", b = 'rose', c= 'leo')
输出:
Positional: ()
Keywords: {'a': 'jack', 'b': 'rose', 'c': 'leo'}
如此看来,**keywords接受了所有的命名参数。虽然传入的个数和参数都没有变,但是为了每一个参数都传递了名字,结果和上面的测试整好相反,第一次*positional接收了所有,第二次**keywords接收了所有位置参数。
我们还可以看出**keywords是字典类型,*positional则是元组类型的。
如果混合使用呢?会是什么效果:
example("one", "two", "three", a = "jack", b = 'rose', c= 'leo')
输出:
Positional: ('one', 'two', 'three')
Keywords: {'a': 'jack', 'b': 'rose', 'c': 'leo'}
显而易见,各自接收了各自类型的参数。由此我们可以知道,*positional接收位置参数,**keywords接受了所有的命名参数。
2022.4.19晚去打球了~卷不动了
❤坚持读Paper,坚持做笔记,坚持学习,坚持刷力扣LeetCode❤!!!
坚持刷题!!!
⚡To Be No.1⚡⚡哈哈哈哈
⚡创作不易⚡,过路能❤关注、收藏、点个赞❤三连就最好不过了
ღ( ´・ᴗ・` )
❤
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)