函数
函数是组织好的,可以重复使用,用来使用单一的或关联功能的代码块
语法:
def 函数名(参数列表):
函数体
reture ....
可以返回多个值,返回的多个值组成一个元组,返回值加上一对中括号,则返回一个列表
函数分为定义和调用
练习:定义一个函数, 实现俩个数字的,加减乘除
a=int(input('请输入数字')) b=input('加减乘除') c=int(input('请输入数字')) def wo(a,b,c): if b=='+': print(a+c) elif b=='-': print(a-c) elif b=='*': print(a*c) else: print(a/c) wo(a,b,c)
可更改(mutable)与不可更改(immutable)对象
在python中,strings,tuples,numbers是不可更改的对象,而list,dict等则是可以修改的对象
不可变类型:
变量赋值 a=5 后在赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a
可变类型:
变量赋值list=[1,2,3,4] 后再赋值 list[2]=5
则是将list的第3个元素的值更改,本身list没有动,只是将其指定下标的值更改了
python 函数的参数传递:
不可变类型:
整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:
列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
参数:
必须参数 关键字参数 默认参数 不定长参数
必须参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用printme()函数,你必须传入一个参数,不然会出现语法错误:
def printme( str ): # "打印任何传入的字符串" print (str); return; #调用printme函数 printme();
以上实例输出结果:
Traceback (most recent call last): File "test.py", line 10, in <module> printme(); TypeError: printme() missing 1 required positional argument: 'str'
关键字参数:
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
以下实例在函数 printme() 调用时使用参数名:
def printme( str ): # "打印任何传入的字符串" print (str); return; #调用printme函数 printme( str = "sdfnbxzc");
以上实例输出结果:
sdfnbxzc
以下实例中演示了函数参数的使用不需要使用指定顺序:
def printinfo( name, age ): # "打印任何传入的字符串" print ("名字: ", name); print ("年龄: ", age); return; #调用printinfo函数 printinfo( age=50, name="runoob" );
以上实例输出结果:
名字: runoob 年龄: 50
默认参数:
调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:
def printinfo( name, age = 35 ): # "打印任何传入的字符串" print ("名字: ", name); print ("年龄: ", age); return; #调用printinfo函数 printinfo( age=50, name="runoob" ); print ("------------------------") printinfo( name="runoob" );
以上实例输出结果:
名字: runoob 年龄: 50 ------------------------ 名字: runoob 年龄: 35
不定长参数:
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串" function_suite return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:
#!/usr/bin/python3 # 可写函数说明 def printinfo( arg1, *vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) for var in vartuple: print (var) return; # 调用printinfo 函数 printinfo( 10 ); printinfo( 70, 60, 50 );
以上实例输出结果:
输出: 10 输出: 70 60 50