Python函数的使用

函数

函数可以将它们的返回值赋给变量,也可以作为参数被其他函数调用,也可以从其他函数中返回值
函数的定义为:依次输入def、函数名、带有函数参数(也可以没有参数)的圆括号、最后加上一个’:’
下面写一个计算两个变量的和的函数

>>> def add_args(x,y):
    print (x + y)

>>> add_args(2,5)
7

接下来再定义一个函数,它有3个参数,第一个参数为一个可以运行的函数的名字

>>> def run_something(func,arg1,arg2):
    func(arg1,arg2)

>>> run_something(add_args,5,2)
7

传进去的函数是add_args,而不是 add _args(),加上括号就表示调用函数,不加括号的话,Python只会把函数当做一个普通的对象处理

内部函数

即在函数中定义另外一个函数

>>> def outer(a,b):
    def inner(c,d):
        return c + d
    return inner(a,b)

>>> outer(4,7)
11
闭包

内部函数可以看成一个闭包,闭包是一个可以由另外一个函数动态生成的函数,并且可以改变和存储函数外创建的变量的值

>>> def knights(saying):
    def inner():
        return "We are the knights who say: '%s'" % saying
    return inner   # 返回的是一个函数

>>> a = knights('Duck')
>>> b = knights('Hasenpfeffer')
# 同样的,a与b的类型都是函数,同时,也是闭包
>>> type(a)
<class 'function'>
>>> type(b)
<class 'function'>
# 接下来我们调用a与b
>>> a()
"We are the knights who say: 'Duck'"
>>> b()
"We are the knights who say: 'Hasenpfeffer'"
匿名函数lambda()函数

lambda函数是用一条语句表达的匿名函数,可以用来代替一些小函数

>>> def edit_story(words,func):
        for word in words:
            print(func(word))

>>> stairs = ['word','number','func','STL']
>>> def change(word):  # 将每个单词首字母变为大写并在末尾加上感叹号
        return word.capitalize() + '!'

>>> edit_story(stairs, change)
Word!
Number!
Func!
Stl!

使用lambda函数代替change()函数

# lambda接收一个参数word,冒号后面都是此函数的定义
>>> edit_story(stairs, lambda word:word.capitalize() + '!')
Word!
Number!
Func!
Stl!
位置参数

传入参数的值是按照顺序依次复制过去的,使用这种方式需要记住每个位置的参数的含义

>>> def menu(wine,entree,dessert):
    return {'wine':wine,'entree':entree,'dessert':dessert}

>>> menu('chardonnay','chicken','cake')
{'wine': 'chardonnay', 'entree': 'chicken', 'dessert': 'cake'}
关键字参数

调用函数时可以指定对应参数的名字,可以采用与函数定义不同的顺序调用,也可以与位置参数一起使用,不过位置参数必须放置于关键字参数前面

>>> menu('frontenac',dessert = 'bagel',entree = 'fish')
{'wine': 'frontenac', 'entree': 'fish', 'dessert': 'bagel'}
指定默认值参数

当调用方没有提供对应的参数值时,可以使用指定默认参数值

>>> def menu(wine,entree,dessert = 'pudding'):
    return {'wine':wine,'entree':entree,'dessert':dessert}

>>> menu('frontenac','chicken')
{'wine': 'frontenac', 'entree': 'chicken', 'dessert': 'pudding'}
>>> menu('duckelfelder','duck','doughnut')
{'wine': 'duckelfelder', 'entree': 'duck', 'dessert': 'doughnut'}
使用*收集位置参数

星号可以将一组 可变数量的位置参数集合成参数值的元组,即此方法会将位置参数转换为一个元组

>>> def print_args(*args):
    print('args:',args)

>>> print_args(3,2,1,'with','in')
args: (3, 2, 1, 'with', 'in')

当然,也可以与位置参数一起使用,不过位置参数要放在前面

>>> def print_more(key1,key2,*other):
    print('1、',key1)
    print('2、',key2)
    print('3、',other)

>>> print_more('cap','gloves','scarf','Shh','one')
1、 cap
2、 gloves
3、 ('scarf', 'Shh', 'one')
使用* *收集关键字参数

使用两个星号可以将参数收集到一个字典中,参数的名字是字典的键,对应参数的值是字典的值

>>> def print_kwargs(**kwargs):
    print('kwargs:',kwargs)

>>> print_kwargs(wine = 'merlot', entree = 'fish', dessert = 'bagel')
kwargs: {'wine': 'merlot', 'entree': 'fish', 'dessert': 'bagel'}

可以将* args与 * *kwargs的参数混合使用,不过要按照顺序出现

>>> def print_more(*args, **kwargs):
    print('args:',args)
    print('kwargs:',kwargs)

>>> print_more('cap','gloves',wine = 'merlot', entree = 'fish', dessert = 'bagel')
args: ('cap', 'gloves')
kwargs: {'wine': 'merlot', 'entree': 'fish', 'dessert': 'bagel'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值