基础规则:
函数代码块以def
关键词开头,后接函数标识符名称和圆括号()
。
def 函数名(参数列表):
函数体
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数(可多个,但尽量不要多于四个)。
函数的第一行语句可以选择性地使用文档字符串——用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式]
结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def area(width, height):
return width * height
w = int(input("请输入宽"))
h = int(input("请输入高"))
print("面积是 =", area(w, h))
函数调用
定义函数,指定函数所包含的参数和代码块结构,通过另一个函数进行调用执行。
def zhengyuting(str):
print(str)
return
zhengyuting("Expecto Patronum!") #调用函数
zhengyuting("Ridiculous!") #再次调用函数
参数传递
zyt=[1,2,3,4,5] #[1,2,3,4,5]的类型为List
zyt="zhnegyuting" #"zhnegyuting" 的类型为String,zyt没有类型,它是一个变量,是一个对象的引用(一个指针),可以指向各种类型
参数
调用函数时可以使用的参数类型:
①必需参数:以正确的顺序传入函数,调用时的数量和声明时的一致,调用函数时必须传入参数,否则报错。
②关键字参数
函数调用使用关键字参数来确定传入的参数值,使用关键字参数允许与声明时的不一致(Python解释器能够用参数名匹配参数值)
def zhengyuting(str):
print(str)
return
zhengyuting(str = "Expecto Patronum!") #使用参数名进行函数调用
③默认参数
调用函数时,没有传递参数,则使用默认参数。
④不定长参数
一个函数能处理比当初声明时更多的参数。
使用一个星号即*
以元组形式导入。(单独出现星号 * 后的参数必须用关键字传入。)
使用两个星号即**
的参数会以字典的形式导入。
def f(a,b,*,c):
return a+b+c
f(1,2,3) # 报错
f(1,2,c=3) # 正常
def zhengyuting(one,*thetuple): #使用星号*的参数以元组形式导入,以存放所有未命名变量参数
print(one)
print(thetuple)
zhengyuting(1,2,3,4)
如果在函数调用时没有指定参数,它就是一个空元组,可以不向函数传递未命名的变量。
对象
可更改对象(可变类型):list,dict
(类比:整容)
不可更改对象(不可变类型):string,tuples,numbers
(类比:换人)
可更改表示它本身没有改变,只是它内部的一部分值被改变。
不可更改的对象在被修改时,实际上已经是新的对象。
可变类型在参数传递时,函数外部的参数也会受到影响,而不可变类型则不会受到影响。
#可变类型
def zhengyuting(zytlist):
zytlist.append([1,2,3])
print("inner",zytlist)
return
zytlist=[4,5,6]
zhengyuting(zytlist)
print("outer",zytlist)
#不可变类型
def zhengyuting(a):
a = 3
b = 1
zhengyuting(b)
print(b)
匿名函数
lambda 可以创建匿名函数。
匿名即不再使用 def 语句这样标准的形式定义一个函数。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法格式:
lambda [arg1 [,arg2,.....argn]]:expression
转载:https://blog.csdn.net/qq_41582429/article/details/101605266