Python基础教程第6章学习笔记

本文是关于Python基础教程第六章的学习笔记,主要探讨了如何进行自定义函数,包括函数的关键字参数、默认值,以及收集参数(可变数目参数)的概念和用法。还介绍了分配参数的反向操作,并提供了实例演示。希望对Python初学者有所帮助。
摘要由CSDN通过智能技术生成

抽象和函数

1、自定义函数
在编写大型程序时,对于经常用到的代码块 可以定义函数来使用 简化代码 高效编程
定义函数的语法如下 def为定于语句 hello是函数名 函数名后面跟参数列表

def hello(name):
 return 'Hello, ' + name + '!' 

一般而言,要判断某个对象是否可调用,可使用内置函数callable。

>>> import math
>>> x = 1
>>> y = math.sqrt
>>> callable(x)
False
>>> callable(y)
True 

2、函数关键字参数和默认值
函数的参数顺序至关重要,在传参时 应一一对应 。 而实际上 函数的参数顺序也是可以忽略的

请看下面两个函数:
def hello_1(greeting, name):
 print('{}, {}!'.format(greeting, name))
def hello_2(name, greeting):
 print('{}, {}!'.format(name, greeting)) 

这两个函数的功能完全相同,只是参数的排列顺序相反。

>>> hello_1('Hello', 'world')
Hello, world!
>>> hello_2('Hello', 'world')
Hello, world! 

有时候,参数的排列顺序可能难以记住,尤其是参数很多时。为了简化调用工作,可指定参
数的名称。

>>> hello_1(greeting='Hello', name='world')
Hello, world!
在这里,参数的顺序无关紧要。
>>> hello_1(name='world', greeting='Hello')
Hello, world!
不过名称很重要(你可能猜到了)。
>>> hello_2(greeting='Hello', name='world')
world, Hello!

像这样使用名称指定的参数称为关键字参数 关键字参数最大的优点在于,可以指定默认值。

def hello_3(greeting='Hello', name='world'):
 print('{}, {}!'.format(greeting, name)) 
>>> hello_3()
Hello, world!
>>> hello_3('Greetings')
Greetings, world!
>>> hello_3('Greetings', 'universe')
Greetings, universe! 

3、收集参数(可变数目参数)
请尝试使用下面这样的函数定义:

def print_params(*params):
 print(params) 

参数前面的星号将提供的所有值都放在一个元组中,也就是将这些值收集起来

>>> print_params('Testing')
('Testing',) 
>>> print_params(1, 2, 3)
(1, 2, 3)

如下这个函数

def print_params_2(title, *params):
 print(title)
 print(params)

调用它:

>>> print_params_2('Params:', 1, 2, 3)
Params:
(1, 2, 3)

因此星号意味着收集余下的位置参数。如果没有可供收集的参数,params将是一个空元组。

>>> print_params_2('Nothing:')
Nothing:
() 

带星号的参数也可放在其他位置(而不是最后)但不同的是,在这种情况
下你需要做些额外的工作:使用名称来指定后续参数。

>>> def in_the_middle(x, *y, z):
... print(x, y, z)
...
>>> in_the_middle(1, 2, 3, 4, 5, z=7)
1 (2, 3, 4, 5) 7
>>> in_the_middle(1, 2, 3, 4, 5, 7)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: in_the_middle() missing 1 required keyword-only argument: 'z' 

星号不会收集关键字参数。

>>> print_params_2('Hmm...', something=42)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: print_params_2() got an unexpected keyword argument 'something'

要收集关键字参数,可使用两个星号。

>>> def print_params_3(**params):
... print(params)
...
>>> print_params_3(x=1, y=2, z=3)
{'z': 3, 'x': 1, 'y': 2}

这样得到的是一个字典而不是元组

下面看这个函数

def print_params_4(x, y, z=3, *pospar, **keypar):
 print(x, y, z)
 print(pospar)
 print(keypar)

尝试调用它:

>>> print_params_4(1, 2, 3, 5, 6, 7, foo=1, bar=2)
1 2 3
(5, 6, 7)
{'foo': 1, 'bar': 2}
>>> print_params_4(1, 2)
1 2 3
()
{} 

4、分配参数(与收集参数相反)
假设如下函数

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

同时假设还有一个元组,其中包含两个你要相加的数。

params = (1, 2)

这与前面执行的操作差不多是相反的:不是收集参数,而是分配参数。这是通过在调用函数
(而不是定义函数)时使用运算符*实现的。

>>> add(*params)
3 

这种做法也可用于参数列表的一部分,条件是这部分位于参数列表末尾。通过使用运算符**,
可将字典中的值分配给关键字参数

def hello_3(greeting='Hello', name='world'):
 print('{}, {}!'.format(greeting, name)) 
>>> params = {'name': 'Sir Robin', 'greeting': 'Well met'}
>>> hello_3(**params)
Well met, Sir Robin! 

说点别的 希望疫情快点过去 快点去上班

Everything is OK! Best wishes !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值