Python的函数
9-1 Python调用函数
-
求绝对值 abs()
绝对值 absolute value
-
比较大小 cmp()
比较 compare
- 小于返回 -1
- 等于返回 0
- 大于返回 1
-
基础数据类型转换函数
- int() 转换为整数
- str() 转换为字符串
-
sum() 接受一个列表作为参数,将列表中元素求和
求和 summation
# 例题: 计算 1*1 + 2*2 + 3*3 + ... + 100*100 L = [] x = 1 while x <= 100: L.append(x * x) x = x + 1 print(sum(L))
9-2 Python定义函数
- 定义流程 & 注意事项
- 定义一个函数要使用 def 语句 ,依次写出 函数名 、 括号() 、 括号中的 参数 和 冒号
定义 define
- 在缩进块中编写函数体,函数的返回值用 return 语句返回
- return表示返回的意思,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回
- 定义一个函数要使用 def 语句 ,依次写出 函数名 、 括号() 、 括号中的 参数 和 冒号
- 示例一
# 以定义一个求绝对值的函数 my_abs 函数
def my_abs(x): # 注意冒号
if x >= 0:
return x
else:
return -x
- 示例二
# 求列表list所有元素的和的函数:
def list_sum(L):
result = 0
for num in L:
result = result + num
return result
# 在最后return,我们把求和的结果result返回了,这样就可以在外部调用函数后获得result
L = [1, 3, 5, 7, 9, 11]
result = list_sum(L) # 调用定义的sum_list函数并获得return返回的结果
print(result)
- 示例三
# 定义一个square_of_sum()函数,它接收一个list,返回list中每个元素平方的和
def square_of_sum(L):
sum = 0
for x in L:
sum = sum + x * x
return sum
# 用sum作为变量要注意不要与sum()函数混淆
print(square_of_sum([1, 2, 3, 4, 5]))
print(square_of_sum([-5, 0, 5, 15, 25]))
9-3 Python函数返回值
- reurn 会返回 None,可将结果在函数中打印
- return a,b return可以返回多个值,注意用逗号分割开
- 返回多个值的类型实际上是tuple,可以用一个值存储这个tuple,并通过下标来单独获得结果中的单个值
9-4 Python递归函数
- 示例:求阶乘
def factorial_(num):
if num == 1:
print('1')
elif num < 0:
print('输入错误')
elif num > 0:
return factorial = factorial_(num - 1) * num
- 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出
Traceback (most recent call last):
RecursionError: maximum recursion depth exceeded in comparison
# 比较中超出了最大递归深度
9-5 Python函数参数
- isinstance(object, classinfo)函数
- 参数
- object – 实例对象
- classinfo – 可以是直接或间接类名、基本类型或者由它们组成的元组
- classinfo可以是int,float,bool,complex,str(字符串),list,dict(字典),set,tuple
- classinfo 的字符串是 str 而不是 string,字典也是简写 dict
- 返回值
- 如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False
- 示例
a = 2 isinstance (a,int) # >>> True isinstance (a,str) # >>> False isinstance (a,(str,int,list)) # 是元组中的一个返回 True
- 参数
9-6 Python函数使用默认参数
- 语法
- 在调用函数时,也可以给所有的参数传值,即便有默认值,它也会优先使用传递给它的新值
def 函数名(... ,形参名=默认值):
代码块
- 示例: int() 函数有两个参数,第二个参数是base进制,不规定时默认为十进制
int('123') # ==> 123
int('123', 8) # ==> 83
- 函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值
- 需要注意的是,由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面,否则将会出现错误
SyntaxError: non-default argument follows default argument
# 非默认参数跟在默认参数之后
- Pyhton 中,可以使用 “ 函数名.defaults ” 查看函数的默认值参数的当前值,其返回值是一个元组
print(dis_str.__defaults__)
9-7 & 9-8 Python函数使用可变参数
- *args 当传入的参数个数未知,且不需要知道参数名称时
def func(*args):
print('args length = {}, args = {}'.format(len(args), args))
func('a') # ==> args length = 1, args = ('a',)
func('a', 'b') # ==> args length = 2, args = ('a', 'b')
func('a', 'b', 'c') # ==> args length = 3, args = ('a', 'b', 'c')
- args 当传入的参数个数未知,但需要知道参数的名称**时
(类似于字典,即键值对)
def func_kwargs(farg, **kwargs):
print("formal arg:", farg)
for key in kwargs:
print("keyword arg: %s: %s" % (key, kwargs[key]))
func_kwargs(1 ,id=1, name='youzan', city='hangzhou',age ='20')
formal arg: 1
keyword arg: id: 1
keyword arg: name: youzan
keyword arg: city: hangzhou
keyword arg: age: 20
- 总结:
- *args是非关键字参数,用于元组
- **kw是关键字参数,用于字典