函数
函数
函数的定义
def fun_name([args]):
function
[return xxx]
创建和调用
def calc(a,b)
c = a + b
return c
result = calc(10,20)
print(result)
函数的参数传递
就是说在你调用时候给出的实际参数,会与开始定义函数的形式参数一一对应(一般靠位置确定)
但是也可以靠这样传递,不过不推荐
result2 = calc(b=10,a=20)
print(result2)
函数的返回值
函数返回多个值的时候,结果为元组。
例:给一串数字10,28,39,34,23,44,53,55;将其分为一组全奇数,一组全偶数。
>>> def fun(num):
odd=[] #存奇数
even=[] #存偶数
for i in num:
if i%2:
odd.append(i)
else:
even.append(i)
return odd,even
>>> print(fun([10,28,39,34,23,44,53,55]))
([39, 23, 53, 55], [10, 28, 34, 44])
>>> print(bool(10))
True
>>> bool(-1)
True
>>> bool(0)
False
函数的返回值
若函数没有返回值,可以省略return不写
函数的返回值,如果是1个,直接返回类型
函数的返回值,如果是多个,返回的结果为元组。
>>> def fun1():
print("hello!")
hello!
>>> def fun2():
return 'hello'
>>> res = fun2()
>>> print(res)
hello
>>> def fun3():
return 'hello','world'
>>> print(fun3())
('hello', 'world')
函数的参数定义
函数定义默认值参数
>>> def fun(a,b=10):
print(a,b)
#函数的调用
>>> fun(100)
100 10
>>> fun(20,30)
20 30
def print(self,*args,sep=' ',end='\n',)
#print函数的原始定义
>>> print('hello',end='\t')
>>> print('world')
hello world
//此时两个print之间的距离就不再是换行了,而是直接一个分隔符的距离。
个数可变的位置参数
- 定义函数的时候,可能无法实现确定传递的位置实际参数的个数的时候,用这个
- 使用*定义个数可变的位置形参
- 结果为一个元组
>>> def fun(*args):
print(args)
>>> fun(10)
(10,)
>>> fun(10,30)
(10, 30)
>>> fun(10,20,30)
(10, 20, 30)
>>> def fun(*args):
print(args)
print(args[0])
>>> fun(10)
(10,)
10
>>> fun(20,30)
(20, 30)
20
个数可变的关键字形参
- 定义函数的时候,可能无法实现确定传递的位置实际参数的个数的时候,用这个
- 使用**定义个数可变的位置形参
- 结果为一个字典
>>> def fun1(**args):
print(args)
>>> fun1(a=10)
{'a': 10}
>>> fun1(a=20,b=30,c=40)
{'a': 20, 'b': 30, 'c': 40}
def print(self,*args,sep=' ',end='\n',)
print('hello','world','java')
hello world java
#例如print函数的参数的个数就是可变。
注意点
#以下代码,程序会报错,个数可变的位置参数,只能是一个
def fun1(*arg1,*arg2)
pass
#以下代码,程序会报错,个数可变的关键字参数,只能是一个
def fun2(**arg1,**arg2)
pass
#若同时有位置形参和关键字形参,把位置形参放在第一位
def fun3(*arg1,**arg2)
pass
def fun(a,b,c):
print('a=',a)
print('b=',b)
print('c=',c)
fun(10,20,30) //位置传参
list1 = [11,22,33]
fun(list1)//xxx 因为这个时候列表只能算一个元素
fun(*list1) //bingo
fun(a=100,c=300,b=200) //关键字传参
dic={'a':111,'b':222,'c':333}
fun(dic) //xxx
fun(**dic) //bingo,关键字传参成功,就是在函数调用的时候把每个键值对转换成关键字传递了
---------------------------
“朝着一个既定的方向去努力,就算没有天赋,在时间的积累下应该也能稍稍有点成就吧。”