自我总结09

函数的引入

下水道 --》 通下水道 --》 找一个工具(买一个工具 --》 方便,拿来就用,不需要关心内部构造)
函数就相当于这个工具 --》 干一件特定的事的(需要用的时候才用,提前造/买)

需要用函数的时候,拿来用就行了,提前写/复制粘贴

def caculator():
    num1 = input('请输入一个数字')
    num1 = int(num1)
    sig = input('请输入一个符号')
    num2 = input('请输入另一个数字')
    num2 = int(num2)

    if sig == '-':
        print(num1 - num2)
    elif sig == '+':
        print(num1 + num2)
    elif sig == '*':
        print(num1 * num2)
    elif sig == '/':
        print(num1 / num2)
    else:
        print('对不起,我不认识')

caculator()

函数的定义

先定义函数,后调用

  • 定义函数:
'''
# 创建一个工具,不会使用(工具名 -->与变量名的规范一模一样)
def 函数名(等同于变量名)():
	"""对函数(工具)的描述信息"""
    
    :param1:描述
    :param2:描述
    :return:返回值

函数名()

'''



def 函数名(param1、param2……):
 
    code 1
    code 2
    code 3
    ...

    return 返回值

# 函数定义的特性: 函数定义过程,只检测语法,不执行代码
  • 调用函数
函数名(param1、param2……)
#猜大小的案例
def guess():
    '''给定两个数,打印较大的数'''
    # 猜大小的代码
    x = 30
    y = 20
    if x > y:
        print(x)
    else:
        print(y)


guess()
print(guess._doc_) # 给定两个数,打印较大的数 
#_doc_解释说明函数方法

# 调用阶段,会执行代码

定义函数的三种方法

空函数

def register():
    # TODO:注册功能,暂时不会写
    pass  # 写个空函数,占个位置

有参函数(有参数()的函数)

def guess1(x,y):
    """给定两个数,打印较大的数"""


    if x > y:
        print(x)
    else:
        print(y)

# 当你使用手电筒,在使用的时候调一下(输入一个参数)
guess1(50,20)  # 使用函数的得传参

无参函数

def guess2():
    """给定两个数,打印较大的数"""
    x = 30
    y = 20

    if x > y:
        print(x)
    else:
        print(y)

函数的调用

def guess1():
    """给定两个数,打印较大的数"""

    x = 20
    y = 30
    if x > y:
        print(x)
    else:
        print(y)


# 函数的调用--》使用函数
print(guess1)  # 函数的地址
guess1() # 没有为什么,加括号就能调用(执行内存中的代码)

函数的返回值

没有return,默认返回None

None就是返回值(使用函数后拿到的一个结果)

return返回一个返回值,如果没有返回值,返回None

def compare():
    x = 10
    y = 20
    if x > y:
        return x
    else:
        return y


res = compare()
print(res)

return 可以终止函数

假设有多个return的时候,运行到第一个就会结束,不会运行第二个
def print_1_10():
    for i in range(10):
        if i == 5:
            return  # 终止函数
        print(i)

print_1_10()

return 可以返回多个值,返回值以元组的形式接收

def return_nums():
    return 10, 100, 1000


res = return_nums()
print(res[1])

函数的参数

有参函数:有参数(手电筒(强光/弱光,强弱你自己调控的))的函数。

使用的时候,你告诉手电筒,他是强光,还是弱光

# :后面规定是参数的数据类型,约定俗成的 ; ->后面规定的是返回值的数据类型,约定俗成的
def compare(num1:int, num2:int)->int:  # 形(形式)参:一般具有描述意义,毫无作用(接收实参)  --》 变量名(接收变量值)

    if num1 > num2:
        print(num1)
    else:
        print(num2)
        
compare(80, 140)  # 实(实际)参 :具有实际的意义,具体的一个值(传给形参)  --》 变量值

位置形参

从左到右一个一个写过去,就叫做位置形参

默认形参

(默认值)形参:给位置形参一个默认值,让他成为默认形参

特点:1.在定义阶段,就已经被赋值。以后调用不需要为他传值,但是你为他传值的话,他也会接收(如果调用的时候传值,使用传的值)

def func(x, y=10):
    print(x)
    print(y)
    
func(2)

2.默认参数必须得放在最后面(位置参数后面)

默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。

位置实参

位置实参:从左到右一个一个写过,就叫做位置实参,(有多少个位置形参,就必须有多少个位置实参,从左到右依次传值)

关键字实参

在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参。

1.位置实参必须写在关键字实参的前面 2.按照形参名给形参传值-->函数的参数一般0-3个,尽量不要超过3个

func(y=2, x=1)

特点:可以打破位置的限制,但仍能为指定的形参赋值。

func(x, y=2)
func(y=2, x)  # SyntaxError: positional argument follows keyword argument #可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的前面
func(x, x=1)  # NameError: name 'x' is not defined #可以混用位置实参和关键字实参,但不能对一个形参重复赋值

可变长参数

(可无限长)

可变长形参

# 可变长形参
def min_2(x, y):
    if x > y:
        return y
    else:
        return x


def min_4(a, b, c, d):
    res1 = min_2(a, b)
    res2 = min_2(c, d)
    return min_2(res1, res2)


def min_8(a, b, c, d, e, f, g, h):
    res1 = min_4(a, b, c, d)
    res2 = min_4(e, f, g, h)
    return min_2(res1, res2)


def min_10(a, b, c, *lt):  # *lt,把所有传过来的实参全部接收,并且以元组的形式存储
    print(lt)
    a, b, c, d, e, f, g, h, i, j, *_ = lt
    print(_)
    res1 = min_8(a, b, c, d, e, f, g, h)
    res2 = min_2(i, j)
    return min_2(res1, res2)


res = min_10(1, 2, 3, 4, 5, 6, 7, -1, 9, 10, 11, 12, 13, 1, 1, 1, 1, 1, 1, 1, 11,
             1, )  # *,相当于做了解压缩,也就是把lt内的元素一个一个取出来传给形参
print(res)

可变长实参

#可变长实参
def min_2(x, y):
    if x > y:
        return y
    else:
        return x


def min_4(a, b, c, d):
    res1 = min_2(a, b)
    res2 = min_2(c, d)
    return min_2(res1, res2)


def min_8(a, b, c, d, e, f, g, h):
    res1 = min_4(a, b, c, d)
    res2 = min_4(e, f, g, h)
    return min_2(res1, res2)


def min_10(a, b, c, d, e, f, g, h, i, j):
    print(a, b, c, d, e, f, g, h, i, j)
    res1 = min_8(a, b, c, d, e, f, g, h)
    res2 = min_2(i, j)
    return min_2(res1, res2)


lt = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
res = min_10(*lt)  # *,相当于做了解压缩,也就是把lt内的元素一个一个取出来传给形参
print(res)
posted @ 2019-09-19 20:35  jzm1201  阅读(109)  评论(0编辑  收藏  举报