🌱Python 函数
函数是一种仅在调用时,运行的代码块。可以将数据(称为参数)传递到函数中,函数可以把数据按照制定的样式作为结果返回。
创建函数
在Python中,使用 def 关键字定义函数,后面跟函数名与括号内的形参列表,函数语句从下一行开始,并且必须缩进。
def my_function():
print("Hello from a function")
调用函数
如需调用函数,请使用函数名称后跟括号。
def my_function():
print("Hello from a function")
my_function()
参数
信息可以作为参数传递给函数,参数在函数名后的括号内指定,可以根据需要添加任意数量的参数,只需用逗号分隔即可。
默认参数值
如果我们使用了不带参数的函数,则使用默认值
def my_function(country = "China"):
print("I am from " + country)
my_function("Sweden")
my_function()
默认值在定义作用域里的函数定义中求值。
i = 5
def f(arg=i):
print(arg)
i = 6
f()
# 此例输出:5
备注:默认值只计算一次。默认值为列表、字典或类示例等可变对象时,会产生与该规则不同的结果。
# 此例会累积后续调用时传递的参数
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
# 输出结果为
[1]
[1, 2]
[1, 2, 3]
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
# 输出结果为
[1]
[2]
[3]
关键字参数
还可以使用key=value语法传递参数。参数的顺序无关紧要。函数调用时,关键字参数必须跟在位置参数后面。所有传递的关键字参数必需匹配一个函数接受的参数。不能对用一个参数多次赋值
def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Phoebe", child2 = "Jennifer", child3 = "Rory")
特殊参数
默认情况下,参数可以按位置或显式关键字传递给 Python 函数。为了让代码易读、高效,最好限制参数的传递方式,这样,开发者只需查看函数定义,即可确定参数项是仅按位置、按位置或关键字,还是仅按关键字传递。
函数定义如下:
/和*是可选的。这些符号表明形参如何把参数值传递给函数:位置、位置或关键字、关键字。关键字形参也叫命名形参。
位置或关键字参数
函数定义中未使用/和*时,参数可以按照位置或关键字传递给函数。
def my_func(a):
print(a)
仅位置参数
特定形参可以标记为 仅限位置 ,仅限位置时,形参的顺序很重要,且这些形参不能用关键字传递。仅限位置形参应放在/(正斜杠)前。/ 用于在逻辑上分隔仅限位置形参与其他形参。
def my_func(a,/):
print(a)
仅关键字参数
把形参标记为 仅限关键字,表明必须以关键字参数形式传递该形参,应在参数列表中第一个 仅限关键字 形参前添加 *。
def my_func(*,a):
print(a)
任意参数
如果不知道将传递给函数多少个参数,请在函数定义的参数名称前添加 * ,这样函数将接受一个参数元组,并可以像影帝访问各项。
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Phoebe", "Jennifer", "Rory")
pass语句
函数定义不能为空,但是如果处于某种原因写了无内容的函数定义,请使用pass语句来避免错误。
def myfunction:
pass
★★★★★★ 递归
lambda表达式
lambda 函数是一种小的匿名函数,可以接受任意数量的参数,但只是有一个表达式。
在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda含糊可以引用包含作用域中的变量。
x = lambda a : a + 10
print(x(5))
编码风格
Python 项目大多都遵循PEP8的风格指南;它推行的编码风格易于阅读、赏心悦目。
- 缩进,用4个空格,不要用制表符(TAB)
- 换行,一行不超过79个字符
- 用空行分隔函数和类,及函数内较大的代码块
- 最好把注释放到单独一行
- 使用文档字符串
- 运算符前后、逗号后要用空格,但不要直接在括号内使用
- 类和函数命名要一致;按惯例按惯例,命名类用 UpperCamelCase,命名函数与方法用 lowercase_with_underscores。命名方法中第一个参数总是用 self
- 编写用于国际多语环境的代码时,不要用生僻的编码。Python默认的 UTF-8或纯ASCII可以胜任各种情况。
- 同理,就算多语阅读、维护代码的可能再小,也不要在标示符中使用非ASCII字符。
文档字符串
文档字符串非常简单,其实直接在函数的第一行写一个字符串就是文档。在第一行写一个单引号或者是双引号就是字符串,但是一般我们会使用三重引号,我们这个长字符串是可以跨行写,这是文档字符串的示例,可以写 函数的作用 函数的参数 ,参数 a 的作用是什么,类型是什么,默认值等等。
备注:Python会抛出未指定的字符串,当成注释。不影响程序运行。
或者说别人可以通过 help 来查看这个描述,或者说直接看源码,这是文档字符串的一个作用,但是不是强制的,最好养成编写文档字符串的一个好习惯,利人利己。