函数
必须先定义后使用
def add(x,y):
re=x+y
print(f"{x},{y},{re}")
add(1,2)
同名函数调用就近原则
参数
1.位置参数
根据函数定义的参数位置传递参数
传递的参数和定义的参数的顺序及个数必须一致,否则要报错
2.关键字参数
函数调用时通过“形参名=实参值”形式传递参数。
def name(n1,n2):
print(f"名字是{n1},{n2}")
name(n2="ds",n1="dsd")#名字是dsd,ds
3.缺省参数
给参数提供默认值,指定了则以指定的为准
def name(n1,n2=22):
print(f"名字是{n1},{n2}")
name(n1="ds")
(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
4.不定长参数
不确定调用的时候会传递多少个参数
- 4.1位置传递
*表示0到多
def name(*args):
print(args)
name("xxc")
args变量收集,它会根据传进参数的位置合并为一个元组(tuple)
def sum(*args):
print(f"{args}的类型是{type(args)}")
total=0
for ele in args:
total+=ele
return total
print(sum(1,2,23))
#(1, 2, 23)的类型是<class 'tuple'>
#26
- 4.2关键字传递
参数是“键=值”形式的情况下,所有的“键=值”都会被kwargs接受,同时会根据“键=值”组成字典。
def info(**kwargs):
print(kwargs)
info(name="tom",age=18,id=10)
函数返回值
def 函数(参数…):
函数体
return 返回值
变量 = 函数(参数)
函数体在遇到return后就结束了,所以写在return后的代码不会执行。
def person_info(**args):
print(f"{args}的类型是{type(args)}")
for ele in args:
print(f"参数名:{ele},参数值:{args[ele]}")
person_info(name='hsp',age=18,email="jdfo")
'''{'name': 'hsp', 'age': 18, 'email': 'jdfo'}的类型是<class 'dict'>
参数名:name,参数值:hsp
参数名:age,参数值:18
参数名:email,参数值:jdfo'''
函数的多返回值
按照返回顺序,用逗号隔开返回
def li():
n1=1
n2=3
return n1,n2
x,y=li()
print(x)#1
print(y)#3
函数作为参数进行传递
def getMax(x,y):
max=x if x>y else y
return max
def f1(fun,n1,n2):
return fun(n1,n2),n1+n2
print(f1(getMax,1,2))
如果函数作为参数进行传递,这个函数只使用一次,这时可考虑lambda匿名函数
基本语法:
def f1(fun,a,b):
return fun(a,b)
max=f1(lambda a,b:a if a>b else b,12,10)
print(max)
NONE类型
None作为一个特殊的字面量,用于表示:空、无意义,有非常多的应用场景。
用在函数无返回值上
用在if判断上
在if判断中,None等同于False
def check_age(age):
if age > 18:
return "SUCCESS"
else:
return None
result = check_age(5)
if not result:
#进入if表示result是None值,也就是False
print("未成年")
变量在函数中的作用域
1.局部
定义在函数体内部的变量,即只在函数体内部生效。
2.全局变量是指在函数体内、外都能生效的变量。
global关键字
使用global关键字,可以在函数内部声明变量为全局变量
num = 100
def test_a():
print(f"test_a:{num}")
def test_b():
# global关键字声明num是全局变量
global num
num = 500
print(f"test_b:{num}")
test_a()
test_b()
print(num)
调用另外一个.py文件中的函数
f1.py
def add(x,y):
return x+y
在f2中调用
import f1
f1.add(1,2)