作用以及语法定义
函数的作用大同小异,在这一点上几乎所有语言都是一致的,都是为了对某些特定的功能进行封装,即我们日常生活中使用的各种电器工具等,都是为了达成一定目的而具体设计和生产出来的,那么函数也是为了这样的目的,通过函数具体的设计实现过程,我们可以通过这些方法达成一定的逻辑运算获得结果或者生成文件等等。
python3 函数语法
def FunctionName(args):
函数体
def 关键字即定义(definition)缩写,用于定义函数时放置到前面作为声明,说明接下来要定义函数了
后面的 FunctionName 为具体的函数名称
args 为这个函数当需要参数时的入参,即做饭你需要原料,那么这些参数就是函数的原料,多个函数时使用英文逗号分割,因为 Python 中没有对变量定义类型所以也不需要定义参数的类型
简单示例:
def myfunction1(a, b, c):
print("第一个参数为", a)
if b == c:
print("b c相等")
else :
print("b c不等")
myfunction1(111, 222, 333);
----------------------
第一个参数为 111
b c不等
可以看出当需要调用函数时直接通过函数名,并放入对应的参数即可调用成功,函数是否写在调用代码之前并不影响调用,实际放到后面时依旧可以运行成功,可以看得出,函数在运行前先被解析
myfunction1(111, 222, 333);
def myfunction1(a, b, c):
print("第一个参数为", a)
if b == c:
print("b c相等")
else :
print("b c不等")
----------------------
第一个参数为 111
b c不等
python 中没有指定参数的数据类型,所以可以理解为对应的参数对象是在赋值后才实际具有了特定的数据类型的特征
可更改(mutable)与不可更改(immutable)对象
python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象
不可更改的对象的值更新时,实际时创建了新的对象
可更改的对象实际上对象本身没有发生变化,变化的是内容,当可更改对象作为参数发生改变时,当经过函数后在外部引用时变化的结果依旧会应用到该对象上,即内部的值变化会跟着改变
参数传入
调用对应的函数时,如果有入参,那么数量和顺序务必保持一致
当调用函数时指定了某个参数中的值时(和定义时的参数名称一致,直接等号赋值),可以不按函数定义参数顺序传入值,例如:
def myfunction2(aa, bb):
print("aa=" + aa)
print("bb=" + bb)
myfunction2(bb="bb", aa="aa")
----------------
aa=aa
bb=bb
这样的方式也成为 关键字参数 指定关键字后 python 的解释器会去匹配参数名
默认参数
定义参数时可以指定参数的默认值,当没有指定参数时,使用默认值
例如:
def myfunction2(aa, bb="22"):
print("aa=" + aa)
print("bb=" + bb)
myfunction2(aa="aa");
------------------------------
aa=aa
bb=22
不定长参数
有时需要一个函数能处理比当初声明时更多的参数,而这些参数叫做不定长参数
语法定义如下:
def functionname([formal_args,] *var_args_tuple ):
[formal_args,] 为确定的参数
*var_args_tuple 表示后面会有不定长的参数,如果存在不定长的参数,这些参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
示例如下:
>>> def myfunctions3(arg1, *vars):
... print("确定参数", arg1);
... print("不定长参数", vars)
... if len(vars) > 0:
... print(vars[0])
...
>>> myfunctions3('first', 1, 2, 3)
确定参数 first
不定长参数 (1, 2, 3)
1
当 * 变为两个时,即 **,不定长参数将以字典形式存储,例如:
>>> def myfunctions3(arg1, **vars):
... print("确定参数", arg1);
... print("不定长参数", vars)
... if len(vars) > 0:
... print(len(vars))
...
>>> myfunctions3('first', a=1, b=2, c=3)
确定参数 first
不定长参数 {'a': 1, 'b': 2, 'c': 3}
3
当 * 单独出现时,位于 * 后面的参数需要使用声明赋值即关键字参数:
例如:
需要给定如下:
>>> def myfunctions3(arg1, *, arg2):
... print("确定参数", arg1);
... print("* 后参数", arg2)
...
>>> myfunctions3('first', arg2=99)
确定参数 first
* 后参数 99
实际上需要传入的参数还是两个, * 只是用来指定后面的参数需要使用 关键字指定,* 本身并不需要填入参数
return
函数中的return 用于结束当前函数的执行,当需要该函数返回某些运算结果时可以将需要返回的内容置于 return 后;
例如:
# 终止
>>> def myfunctions3(a):
... while True:
... if a > 3:
... return
... else:
... print(a)
... a += 1;
...
>>> myfunctions3(0)
0
1
2
3
# 返回值
>>> def myfunctions3(a):
... while True:
... if a > 3:
... return a
... else:
... print(a)
... a += 1;
...
>>> b = myfunctions3(0)
0
1
2
3
>>> print(b)
4