所谓函数就是将一批代码进行打包封装,便于之后使用
比如
def my_fun():
print("我爱你")
my_fun()
这样在任何地方使用my_fun()即可马上输出“我爱你”,
一、初入函数
不仅如此,函数分为有参函数和无参函数,有返回函数和无返回函数,总共四个
- 有参有返回函数
- 有参无返回函数
- 无参有返回函数
- 无参无返回函数
我上方的就是无参无返回函数,参数就是在my_fun()括号中有无参数,
返回数就是函数中是否有return
# 有参有返回函数
def my_fun(n):
return n
n = "我爱你"
print(my_fun(n))
# 有参无返回函数
def my_fun(n):
print(n)
n = "我爱你"
my_fun(n)
# 无参有返回函数
def my_fun():
return "我爱你"
print(my_fun())
# 无参无返回函数
def my_fun():
print("我爱你")
my_fun()
二、函数参数
1.参数调整
关键字参数,顺序可以任意调整
"""
关键字参数,顺序可以任意调整
"""
def fun(name, age, sex):
print(name, age, sex)
fun(name='张三', age='18', sex='男')
fun(age=18, sex='男', name='张三')
2.参数替换
可以在函数中提前设置参数,也可以在函数外替换参数
"""
参数替换
"""
def fun(name='张三', age=18, sex='男'):
print(name, age, sex)
fun()
fun('李四')
fun(age = 666)
fun('男',18,'小明')
fun('小华')
3.不定长参数
参数不是定长的,在参数前加入“*”,即可将参数改成不定长,而且会将num改成元组格式
"""
位置的不定长参数
"""
def text(*num, a, b):
print(num)
print(a)
print(b)
text(1,2,3,4,5, a = 5, b = 5)
def text(num, a, *b):
print(num)
print(a)
print(b)
text(1,2,3,4,5, )
既然是元组,当然可以解包啦
"""
函数解包元组
"""
def fun1(*num):
my_sum = 0
even_sum = 0
odd_sum = 0
for i in num:
my_sum += 1
if i % 2 == 0:
even_sum += 1
else :
odd_sum += 1
return my_sum, even_sum, odd_sum
res =fun1(2, 6, 7, 8, 11, 10)
print(res, type(res))
a, b, c = fun1(2, 6, 7, 8, 11, 10)
print(a, b, c)
当然,不仅可以改成元组,还可以改成字典,只需要改成“**”两个就可以了
"""
打包成字典
"""
def fun(**kwargs):
print(kwargs)
fun(a = 12, b = 13, c = 14)
fun(小明=12)
fun(小明=)
小例题如下
"""
定义函数,参数为关键字可变长参数,请将其中HuaHua的身高修改为160,
然后打印出所有身高不足180的姓名,
使用fun(XiaoMing=155,XiaoHong=171,XiaoHei=192,HuaHua=2333)调用测试
"""
def fun(**height):
if 'HuaHua' in height:
height['HuaHua'] = 160
print([name for name,height_n in height.items() if height_n <= 180])
fun(XiaoMing=155,XiaoHong=171,XiaoHei=192,HuaHua=2333)
"""
定义函数,参数为关键字可变长参数,请计算他们的平均身高,
使用fun7(xiaoming=’178cm’,xiaobai=’182cm’,xiaohong=’166cm’,xiaohei=’174cm’)
"""
def fun7(**k):
heights = 0
for height in k.values():
heights += int(height.split('cm')[0])
return heights/len(k)
res = fun7(xiaoming='178cm', xiaobai ='182cm', xiaohong ='166cm', xiaohei ='174cm')
print(res)
三、函数嵌套
1.函数参数作用域
讲函数前要先讲清函数的参数作用区域
"""
函数外和函数内的参数不通
"""
def fun1():
a = 10
print(a)
def fun2():
print(f"fun1函数{a}")
fun1()
# fun2() # 此函数会报错
在函数1中定义的参数a , 不会被函数2识别,因为当函数结束时,函数内定义的参数会被删除,无法被函数外识别,这就是全局变量和局部变量的区别
当然如果一定要函数fun2识别到fun1中的参数a,也可以利用global方法
def fun1():
global a
a = 10
print(a)
def fun2():
print(f"fun1函数{a}")
fun1()
fun2() # 函数运行成功
2.函数嵌套
函数中能当然能定义新的函数啦,并且分为三种
- 直接调用
- 返回调用
- 返回方法名调用
"""
在外函数调用内函数
"""
# 1.直接调用
def out_fun():
print("外函数")
def in_fun():
print("内函数")
in_fun()
out_fun()
# 2.返回调用
def out_fun():
print("外函数")
def in_fun():
print("内函数")
return in_fun()
out_fun()
# 3.返回函数名调用
def out_fun():
print("外函数")
def in_fun():
print("内函数")
return in_fun
out_fun()()
返回函数名调用最抽象,返回值居然是函数名,然后加上多余出来的()可以调用内函数
再配合有无参有无返回的嵌套
"""
函数闭包
"""
# out 有参数有返回值。 in 有参数有返回值
def out_fun(x):
def in_fun(y):
return y ** x
return in_fun
print(out_fun(2)(3))
# out无参数有返回函数,in无参数有返回函数
def out_fun():
x = 100
def in_fun():
return x + 666
return in_fun
print(out_fun()())
# out无参数有返回函数,in无参数有返回函数
def out_fun():
x = 100
def in_fun():
return x + 666
return in_fun()
print(out_fun())
当然,还可以和global一起使用
"""
global全局函数的使用
"""
x = 100
def out_fun():
# global x
x = 200
def in_fun():
# global x
x = 300
print(f"内涵数中输出{x}")
in_fun()
print(f"外函数输出{x}")
out_fun()
print(f"函数外输出{x}")
除了global外还有一个nonlocal
- global关键字用于声明一个变量是全局变量,即在函数之外定义的变量。
- nonlocal 关键字用于在嵌套函数中声明一个变量是非局部变量,但它不属于全局作用域,而是属于外层的嵌套函数作用域。
"""
nonlocal函数参数绑定外一层
"""
def out_fun():
x = 666
def in_fun():
# nonlocal x
x = 100
print(f"内函数里面的{x}")
in_fun()
print(f"外函数里面的{x}")
out_fun()
标签:入门,python,print,参数,fun,out,def,函数
From: https://blog.csdn.net/qq_63627943/article/details/143633054