目录
一、函数的创建和调用
1.创建函数
2.函数的调用
二、参数传递
1.形式参数和实际参数
2.位置参数
3.可变参数
3.1 *parameter可变参数
3.2 **parameter可变参数
4.关键字参数
4.1 关键字参数
4.2 命名关键字参数
5.为参数设置默认值
三、返回值
四、变量的作用域
1.局部变量
2.全局变量
五、匿名函数
记录python函数的相关内容,通过函数,可以定义一些重复性的操作为函数,方便重复调用。
创建格式:
def functionname([parameterlist]):
["""comments"""]
[functionbody]
functionname([parametersvalue])
示例:
# _*_ coding:utf-8 _*_
# 定义函数
def funcdemo(obj):
"""
func:打印传入参数,并添加自身
obj:传入参数,可以是任意类型
"""
print("调用时:",obj)
obj += obj
print("-----------值传递------------")
string = "this is a string" # 字符串为不可变对象
print("调用前:",string)
funcdemo(string)
print("调用后:",string)
print("-----------引用传递------------")
list_test = ["ok","no","NG"]
print("调用前:",list_test)
funcdemo(list_test)
print("调用后:",list_test)
结果:
-----------值传递------------
调用前: this is a string
调用时: this is a string
调用后: this is a string
-----------引用传递------------
调用前: ['ok', 'no', 'NG']
调用时: ['ok', 'no', 'NG']
调用后: ['ok', 'no', 'NG', 'ok', 'no', 'NG']
>>>
位置参数也称必备参数,调用函数时必须按照正确的顺序传递到函数中。
参数少了或者参数类型错误而内部调用时无法正常转换的会报TypeError。
使用可变参数定义函数参数,可以传递任意多个参数。
以元组形式接收任意更多个参数,可以传入元组
示例:
# _*_ coding:gbk _*_
def printUser(*user):
for index,item in enumerate(user):
print("I'm number : {}, my name is : {}".format(index,item))
print(r'printUser("Tom","Jim","Josn")')
printUser("Tom","Jim","Josn")
结果:
printUser("Tom","Jim","Josn")
I'm number : 0, my name is : Tom
I'm number : 1, my name is : Jim
I'm number : 2, my name is : Josn
以字典形式接受任意多个带参数名的参数,也可以将字典加上“**”直接传入
示例:
# _*_ coding:gbk _*_
def printUser(**user):
for key,value in user.items():
print("I'm number : {}, my name is : {}".format(key,value))
print(r'printUser(Tom = "Tom", Jim = "Jim",Json = "Josn")')
printUser(Tom = "Tom", Jim = "Jim",Json = "Josn")
dict_user = {"Tom":"Tom", "Jim":"Jim","Json":"Josn"}
print("dict_user:",dict_user)
printUser(**dict_user)
print(r'printUser("Tom","Jim","Josn")')
printUser("Tom","Jim","Josn")
结果:
printUser(Tom = "Tom", Jim = "Jim",Json = "Josn")
I'm number : Tom, my name is : Tom
I'm number : Jim, my name is : Jim
I'm number : Json, my name is : Josn
dict_user: {'Tom': 'Tom', 'Jim': 'Jim', 'Json': 'Josn'}
I'm number : Tom, my name is : Tom
I'm number : Jim, my name is : Jim
I'm number : Json, my name is : Josn
printUser("Tom","Jim","Josn")
Traceback (most recent call last):
File "E:\Desktop\Demo.py", line 17, in
printUser("Tom","Jim","Josn")
TypeError: printUser() takes 0 positional arguments but 3 were given
注意:
传入类型非字典或者没有参数名时会报错TypeError。
使用形式参数的名称来确认传入的参数值。
使用关键字参数可以不用与定义的参数顺序保持完全一直,只需要保持参数名正确即可,相对会更灵活方便。
示例:
# _*_ coding:gbk _*_
def personInfo(name,age):
print("My name is : ",name)
print("My age is : ",age)
print(r'personInof("Tom",18)')
personInfo("Tom",18)
print(r'personInof(name = "Tom",age = 18)')
personInfo(name = "Tom",age = 18)
print(r'personInof(age = 18,name = "Tom")')
personInfo(age = 18,name = "Tom")
结果:
personInof("Tom",18)
My name is : Tom
My age is : 18
personInof(name = "Tom",age = 18)
My name is : Tom
My age is : 18
personInof(age = 18,name = "Tom")
My name is : Tom
My age is : 18
def functionname([parameterlist],*,[parameterlist1]):
["""comments"""]
[functionbody]
示例1,命名关键字参数:
# _*_ coding:utf-8 _*_
# 定义函数
def funcdemo(name,age,*,gender,job):
"""
func:打印传入参数
"""
print(name,age,gender,job)
funcdemo("小明",18,gender="M",job="混子")
结果:
小明 18 M 混子
>>>
若调用时没有使用关键字参数则会报错:
示例2,声明可变参数后,命名关键字参数:
# _*_ coding:utf-8 _*_
# 定义函数
def funcdemo(name,age,*classes,gender,job):
"""
func:打印参数
"""
print(name,age,classes,gender,job)
funcdemo("小明",18,"英语","数学",gender="M",job="混子")
结果:
小明 18 ('英语', '数学') M 混子
若没有关键字,则会报错:
注:字典可变参数后不可添加命名可变参数,否则会报错。
在定义函数的时候直接定义默认值,这样即使调用函数的时候没有传入参数,函数会自动调用默认值,避免因为参数没有传入导致函数异常报错。
格式:
def functionname([parameterlist = defaultvalue]):
["""comments"""]
[functionbody]
返回函数值。
return [value]
局部变量指在函数内部定义并使用的变量,只在函数内部才有效。
示例:
# _*_ coding:utf-8 _*_
# 定义函数
def funcdemo():
"""
func:打印参数
"""
obj = "这个是是局部变量"
print("函数内打印局部变量::",obj)
funcdemo()
print("函数外打印局部变量::",obj)
结果:
函数内打印局部变量:: 这个是是局部变量
Traceback (most recent call last):
File "D:\Desktop\Demo.py", line 14, in
print("函数外打印局部变量::",obj)
NameError: name 'obj' is not defined
>>>
局部变量只能在函数内使用,在外部调用时会报错NameError。
全局变量指可以在函数外部使用的变量。有两种定义方式:
示例1,在函数外声明全局变量:
# _*_ coding:utf-8 _*_
# 定义函数
def funcdemo():
"""
func:打印参数
"""
print("函数内打印全局变量::",obj)
obj = "这个是是全局变量"
funcdemo()
print("函数外打印全局变量::",obj)
结果:
函数内打印全局变量:: 这个是是全局变量
函数外打印全局变量:: 这个是是全局变量
在外部生命全局变量,在函数内或者函数外都可以正常调用。
示例2,在函数类用global关键字声明全局变量:
# _*_ coding:utf-8 _*_
# 定义函数
def funcdemo():
"""
func:打印参数
"""
global obj
obj = "这个是是全局变量"
print("函数内打印全局变量::",obj)
funcdemo()
print("函数外打印全局变量::",obj)
结果:
函数内打印全局变量:: 这个是是全局变量
函数外打印全局变量:: 这个是是全局变量
注意:
使用lamba创建匿名函数,仅使用一次,不需要对函数进行命名。
格式如下:
result = lamba [arg1[,arg2,...,argn]]:expression
函数 | 说明 | 备注 |
---|---|---|
eval() | 获取表达式的值 | |