函数
为什么使用函数?
简化代码,代码模块化,减少代码冗余...
定义函数基本格式
def test():
"""
函数功能说明
"""
x+=1
return x
def:定义函数的关键字,全称difine
test:函数名
():内可定义形参
"""""":文档描述(非必要,但是强烈建议为你的函数添加描述信息)
x+=1:泛指代码块或程序处理逻辑
return:定义返回值
练习
定义不带参数使用默认返回值的函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def printInfo():
print('------------------------------------')
print(' 人生苦短,我用Python')
print('------------------------------------')
# 调用函数
printInfo()
定义带必填参数使用默认返回值的函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def sum_nums(a, b):
c = a + b
print("%s+%s=%s" % (a, b, c))
sum_nums(10, 20)
定义带必填参数使用自定义返回值的函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def sum_nums(a, b):
c = a + b
print("%s+%s=%s" % (a, b, c))
return c
result = sum_nums(10, 20)
print(c)
定义带必填参数和可选参数,使用默认返回值的函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def sum_nums(a, b=0):
c = a + b
print("%s+%s=%s" % (a, b, c))
sum_nums(10)
sum_nums(10, 20)
调用函数时改变参数顺序
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def sum_nums(a, b=0):
c = a + b
print("%s+%s=%s" % (a, b, c))
sum_nums(b=20, a=10)
不定长参数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;
# 而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。
def sum_nums(a, b=0, *args, **kwargs):
print(args)
print(kwargs)
c = a + b
print("%s+%s=%s" % (a, b, c))
sum_nums(10)
sum_nums(10, 20)
sum_nums(10, 20, 30, 40, 50)
sum_nums(10, 20, 30, name="张三", age=40)
补充
# 可选参数必须放在必选参数后面
# 定义时小括号中的参数,用来接收参数用的,称为 “形参”
# 调用时小括号中的参数,用来传递给函数用的,称为 “实参”
面试题的大坑
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def app_num(i, result=[]):
for x in range(i):
result.append(x*x)
return result
print(app_num(3))
print(app_num(4, [1, 2, 3]))
print(app_num(3))
模拟系统的print,定义zs_print
def zs_print(*args, sep=" "):
log_str = sep.join(args)
print(log_str)
自定义一个函数用于计算n个数的+-*的结果
def zs_calculator(*args, method="+"):
if not method in ['+', '*', '-']:
raise ValueError("运算符写的不对")
args = tuple(map(str, args))
result = eval(method.join(args))
print("{}={}".format(method.join(args), result))
zs_calculator(1, 3, 5, 7, 9)
zs_calculator(1, 3, 5, 7, 9, method="*")
zs_calculator(1, 3, 5, 7, 9, method="-")
def zs_calculator(*args, method="+"):
if not method in ['+', '*', '-']:
raise ValueError("运算符写的不对")
args = list(map(str, args))
result = 0
if method == "-":
result = int(args.pop(0))
if method == "*":
result = 1
for num in args:
num = int(num)
if method == "+":
result += num
if method == "-":
result -= num
elif method == "*":
result *= num
print("{}={}".format(method.join(args), result))
zs_calculator(1, 3, 5, 7, 9)
zs_calculator(1, 3, 5, 7, 9, method="*")
zs_calculator(1, 3, 5, 7, 9, method="-")
zs_calculator(1, 3, 5, 7, 9, method="abc")