函数

1.定义:由若干语句组成的语句块、函数名称、参数列表构成,是组织代码的最小单元,完成一定的功能

2.作用:简单的封装,为了复用

3.分类:内建函数,如max()、reversed()等

              库函数,如math.ceil()等

               自建函数

4.函数定义、调用

         定义: def 函数名(参数列表):

                函数体(代码块)

                [return 返回值]

                函数名就是标识符,命名要求一样

                语句块必须缩进,约定4个空格

                python的函数没有return语句,隐式会返回一个None值

                定义中的参数列表成为形式参数,只是一种符号表达,简称形参

       调用

                函数定义,只是声明了一个函数,不会被执行,需要调用

                调用的方式,就是:函数名(参数)

                调用时写的参数是实际参数,是实实在在传入的值,简称实参

5.函数参数

     参数调用时传入的参数要和定义的个数相匹配(可变参数例外)

     位置参数

           def f(x,y,z) 调用使用f(1,3,5)

            按照参数定义顺序传入实参

      关键参数

            def f(x,y,z) 调用时使用f(x=1,y=3,z=5)

            使用形参的名字来传入实参的方式,如果使用了形参的名字,那么传参顺序就可以和定义顺序不同

      传参

           f(z=None,y=10,x=[1])

           f((1,),z=6,y=4.1)

           f(y=5,z=6,2) #此方法不可行,要求位置参数必须在关键字参数之前传入,位置参数是按位置对应的

6.函数参数默认值

       定义时,在形参后跟上一个值。没有缺省值的放在前面

       def add(x=4,y=5):

             return x+y

         作用:(1)参数的默认值可以在未传入足够的参数的时候,对没有给定的参数赋值为默认值

                     (2)参数非常多的时候,并不需要用户每次都输入所有的参数,简化函数调用

7.可变参数

        一个形参可以匹配任意个参数,在形参前使用*表示该参数是可变参数,可以接收多个实参,包括0个, 收集多个实参为一个tuple

       形参前使用**,表示可以接收多个关键字参数,收集的实参名称和值组成一个字典dict

def showconfig(**kwargs):
    for k,v in kwargs.items():
         print('{}={}'.format(k,v))
showconfig(host='127.0.0.1',port='8080',username='wang',password='magedu')

       可变参数混合使用,可变参数要放到参数列表的最后,普通参数需要放到参数列表前面,位置可变参数需要在关键字可变参数之前(越复杂越靠后)

8.keyword-only参数(python3加入)

       如果在一个星号参数后,或者一个位置可变参数后,出现的普通参数,实际上已经不是普通的参数了,而是keyword-only参数

def fn(*args,x):
    print(x)
    print(args)

fn(3,5) #错误
fn(3,5,7) #错误
fn(3,5,x=7)
#args可以看做已经截获了所有的位置参数,x不使用关键字参数就不可能拿到实参

     keyword-only参数另一种形式

def fn(*,x,y):
    print(x,y)
fn(x=5,y=6)
# *号之后,普通形参都变成了必须给出的keyword-only参数

9.参数解构

def add(x, y):
    return x + y

add(*(4, 5)) #注意数量,如add(*(4, 5 ,6))错 
add(*{4, 5}) #注意数量,如add(*{4, 5 ,6})错 
d={'x':5,'y':6}
add(**d)
add(**{'x':5,'y':6})


d = {'a': 5, 'b': 6}
add(*d.values())

(1)在集合类型前使用*或者**,把集合类型的结构解开,提取出所有元素作为函数的实参

(2)非字典类型使用*解构成位置参数

(3)字典类型使用**解构成关键字参数

(4)提取出的元素数目和要和参数的要求匹配,也要和参数的类型匹配

import random

def double_values(*args):
"""
输出最大最小值
"""
    print(args)
    return max(args), min(args)

print(*double_values(*[random.randint(10, 20) for _ in range(10)])) #第一个*号将打印结果解构,不加*打印整个元组,第二个*号把参数进行解构

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值