函数

为什么使用函数?

简化代码,代码模块化,减少代码冗余...

定义函数基本格式

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)) # 把args所有参数转成str,再转成列表类型.因为元组不可变,列表可以改变
    result = 0 # 如果是加法,默认从0开始累加
    if method == "-":
        result = int(args.pop(0)) # 如果是减法,取出第0个累减剩下的
    if method == "*":
        result = 1 # 如果是乘法,从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")

results matching ""

    No results matching ""