一.函数的理解和定义
1.定义:
def 函数名():
函数体
例:
def collatz(number):
# if number % 2 == 0:
# print(number//2)
# else:
# print(3*number+1)
print(number//2 if number %2 ==0 else 3 * number +1)
collatz(2)
2.空函数:
pass可以用来作占位符
def fun():
pass
fun()
print('abc')
3.函数里面嵌套函数
def fentiao():
print('is fentiao....')
def westos():
print('westos')
westos()
fentiao()
4.调用函数
def hello():
print('hello')
print('hello')
#调用函数
hello()
二.函数动态添加成员
def fun():
print(fun.x)
fun()
1.动态添加
fun.x = 3
fun()
2.动态删除
del fun.x
fun()
三.函数的返回值
函数调用时一般有返回值,没有定义返回值的时候,python中默认返回None
#返回None
def hello():
print('hello')
res = hello()
print(res)
#返回hello
def hello():
# return 返回的表达式或者变量
return 'hello'
res = hello()
print(res)
多个返回值
python 函数中,只能返回一个值,如果非要返回多个值,会把返回的值封装为一个元组数据类型。
def fun(a):
# 接收一个列表,求这个列表的最大值,平均值,最小值
max_num = max(a)
min_num = min(a)
avg_num = sum(a)/len(a)
return max_num,min_num,avg_num
variables = fun([34,1,2,3,4,5,6,7,421])
print(variables,type(variables))
四.函数的实参与形参
1.实参:
调用函数时的参数称为实参,该参数必须是实际存在的
2.形参:
定义函数时的变量称为形式参数,变量名可以任意起
分类:
1.位置参数:
形参和实参必须保持一致(按照位置传递函数)
例:
def getInfo(name, age):
print(name, age)
getInfo(age=18, name='name')
2.默认参数:
形参和实参可以不一致
def mypow(x,y=2):
"""
求x的y次方
:param x:
:param y:
:return:
"""
print(x**y)
mypow(4)
mypow(4,3)
3.可变参数:*args
可变参数就是传入的参数个数是可变的,(可以是0个,1个,2个,任意个)
def mySum(*args):
"""
需求:用户可以传递任意的值,计算数值的和
*args:是一个可变参数
args:是元组数据类型
:param args:
:return:
"""
#print(args)
sum = 0
for item in args:
sum += item
print(sum)
mySum(1,2,3,4,5,6,7,8)
4.关键字参数:**kwargs
关键字参数允许传入0个或任意个含参数名的参数;这些关键字参数在函数内部自动组装为一个dict。
# 关键字参数
def getStuInfo(name,age,**kwargs):
print(name,age)
print(kwargs)
getStuInfo('westos',11,hobbies=['code','running'],gender='female')
5.参数解包
对 列表,元组,集合解包时,只需要在变量前加*
nums = [1,2,3,4,5,6]
nums1 = (2,5,6,7,9,10)
nums2 ={1,2,3,4,5,6,7,8}
mySum(*nums2)
score = (12,23,56,78,90)
minscore,*middlescore,maxscore = score
print(*middlescore)
print(middlescore)
如果要对字典进行解包,一个星号获取key值,两个星号全部获取
d = dict(a=1,b=2)
print(*d)
getStuInfo('westos',11,**d)
五.函数的作用域
1.全局作用域
作用于整个程序
num = 10
print('out fun: id=',id(num))
2.局部作用域
在函数运行时生效,函数运行时生效,函数运行结束则释放
num=10
def fun():
#局部作用域,在函数运行时生效,函数运行结束则释放
num =2
print('in fun:id=',id(num))
print('in fun:num = %s' %(num))
fun()
print('out fun: num=%s' %(num))
可以通过global关键字声明局部变量为全局变量
num = 10
def fun():
# 通过global关键字声明局部变量为全局变量
# 函数执行完毕,变量依然生效
global num
num = 2
fun()
print(num)