目录
1,定义函数
2,调用函数
3,函数参数
4,参数的传递方式
①位置参数
②不定长参数(可变参数,用于调用时不确定参数的个数)
5,函数的返回值,递归
6,函数说明文档
7,函数嵌套
8,变量作用域
9,lambda表达式(匿名函数)
1,定义函数
什么是 函数?-------直接调用的
语法,def 函数名():
代码
什么是方法?-------需要.出来的
ls=[] ls.append(1)
2,调用函数
语法,函数名()
注意,在Python中,函数必须先定义,后调用
在Java中定义函数-------public void test(){};
python中没有修饰符,但需要关键字
不需要具备返回类型,但可以具备返回值
def test():
print("hello world")
# 一个函数和一个代码之间要隔两行代码
def test1():
return 123
test和test()的区别?
test是函数 test()是函数的返回值
每个函数都有返回值,如果没有定义则为None
print(test())-----函数没有返回值,因此输出为None,相当于Java里的Nullprint(test)-----输出函数本身fn=test-----把test方法赋值给fn fn()-----输出hello world
和Java不同,python没有重载(同名不同参)
def test1(): print("hello world") # 一个函数和一个代码之间要隔两行代码 def test1(name:str): print(name)test1("jack") test1()
上面的代码运行会报错,test1缺少必须的name参数
修改
def test1(name:str='jack'): print(name)控制台输出jack
3,函数参数
语法,def 函数名(参数名1,参数名2):
代码
调用有参的函数,参数名(参数值1,参数值2)
形参:参数名1,参数名2
实参:参数值1,参数值2
def fn1(a:int,b:int):
print(a+b)
def fn1(a:int,b:int):
print(a**b)
# 默认值参数必须在最后
def fn1(b:int,a:int=2):
print(a+b)
fn1(2,3) 输出5
fn1(b=2,a=3) 输出5
fn1(2) 输出4
# 形参和实参
# a,b就是形参,定义了但是没有具体值
def test(a,b):
pass
# 实参
test(1,2)
# 形参和实参是通过位置来对应的
# 形参位置倒换
test(a=1,b=2)
4,参数的传递方式
①位置参数
调用函数时根据函数定义的参数位置来传递参数
注意:传递和定义参数的顺序及个数必须一致
两个参数比较大小
def max(a,b):
return a if a>b else b
print(max(1,2))
②不定长参数(可变参数,用于调用时不确定参数的个数)
包裹位置传递,语法,def 函数名(*args):
代码
函数返回值为:元组
包裹关键字传递,语法,def 函数名(**kwargs):
代码
函数返回值为:字典
多个参数,
java中 public void add(int ..is)
python中的可变参数,一个*号,代表可变参数
def max(*ns): print(ns) max(1,2,3,4,5,6,7,8)控制台输出(1, 2, 3, 4, 5, 6, 7, 8),说明放在元组中
# 接收到字典类型dict---map def show(**ps): # print(ps) #字典取键 for i in ps.keys(): print(type(i)) # 字典取值 for i in ps.values(): print(type(i)) # 取元组 for i in ps.items(): print(type(i)) # 取键和值 for i in ps.items(): print(i[0],i[1]) show(name=1,sex='男',age=12)控制台输出
name 1
sex 男
age 12
5,函数的返回值,递归
返回单个值,语法,def 函数名(参数名1,参数名2):
return 结果
调用 变量名接受 = 函数名(参数值1,参数值2)
返回多个值,语法,def 函数名(参数名1,参数名2):
return 结果1,结果2
递归,函数内部,自己调用自己
def max(*ns): my_sum=0 my_max = ns[0] my_min = ns[0] for i in ns: my_sum+=i if i>my_max: my_max=i if i < my_min: my_min = i# print(my_sum,my_max,my_min) # # # max(1, 2, 3, 4, 5, 6, 7, 8) ---输出36 8 1# 放集合里 return [my_sum,my_max,my_min] ---输出[36, 8, 1] return my_sum, my_max, my_min ---输出(36, 8, 1) print(max(1, 2, 3, 4, 5, 6, 7, 8)) ---输出(36, 8, 1) # 元组拿值取值 a,b,c=max(1, 2, 3, 4, 5, 6, 7, 8) print(a,b,c) ---输出36 8 1
6,函数说明文档
语法,def 函数名(参数):
"""函数的说明文档内容"""
函数体
return 返回值
使用,help(函数名)
注意,函数的说明文档,建议对参数和返回值做说明
def test(a:int,b:int):
"""
对两个数字进行增加操作
:param a:第一个
:param b:第二个
:return:什么都不返回
"""
pass
help(test)
7,函数嵌套
函数嵌套,函数中调用函数
# 函数嵌套
def fb(n:int):
if n==1 or n==2:
return 1
return fb(n-1)-fb(n-2)
# 1 1 2 3 5 8 13 21....
print(fb(4))
8,变量作用域
局部变量,在函数体内部
全局变量,在函数体外
在函数体中修改全部变量的值:
错误做法:在函数体中,直接使用 全局变量名 = 新值
注意:这种做法,只是重新声明了一个局部变量,变量的名字和全局变量一样,但是修改不了全局变量的值
正确做法:①. 声明全局变量,global 变量名
②.修改全局变量的值,变量名 = 变量值
a=1 def test(): global a #引用全局变量a a=3 print(a) test() print("--",a)控制台输出
3
-- 3
9,lambda表达式(匿名函数)
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化
语法,变量名 = lambda 参数列表:表达式/返回值。
注意:参数可以省略
参数形式:无参数,一个参数,默认参数,可变参数(*args,**kwargs)
带判断的lambda:返回值中使用 三元运算符
列表内字段数据进行排序
语法:列表.sort( key = lambda x:x['排序的列'])------升序
列表.sort( key = lambda x:x['排序的列'],reverse=True)-----降序
# lambda 函数简写: # js中:()=>{} # java中:也有()->{} # python中:1,必须有返回值,2,只有一条语句 def add(a,b): return a+b # 接收的参数:返回值 fn=lambda a,b:a+b print(add(1,2)) print(fn(1,2)) # lambda完成两数比较 fn=lambda a,b:a if a>b else b print(fn(1,2)) fn=lambda :'你好' print(fn())控制台输出
3
3
2
你好



