-
类与对象
1. 属性和方法组成对象
2. self是什么?
3. Python的魔法方法
4. 公有和私有
5. 继承
6. 组合
7. 类、类对象和实例对象
8. 什么是绑定?
9. 一些相关的内置函数(BIF) -
魔法方法
1. 基本的魔法方法
2. 算术运算符
3. 反算术运算符
4. 增量赋值运算
5. 一元运算符
6. 属性访问
7. 描述符
8. 定制序列
9. 迭代器
4. 关键字参数
def functionname(arg1, arg2=v, *args, **kw):
“函数_文档字符串”
function_suite
return [expression]
**kw
- 关键字参数,可以是从零个到任意个,自动组装成字典。
【例子】
#%%
def printinfo(arg1, *args, **kwargs):
print(arg1)
print(args)
print(kwargs)
printinfo(70, 60, 50)
70
(60, 50)
{}
printinfo(70, 60, 50, a=1, b=2)
70
(60, 50)
{‘a’: 1, ‘b’: 2}
#%% md
「可变参数」和「关键字参数」的同异总结如下:
- 可变参数允许传入零个到任意个参数,它们在函数调用时自动组装为一个元组 (tuple)。
- 关键字参数允许传入零个到任意个参数,它们在函数内部自动组装为一个字典 (dict)。
5. 命名关键字参数
def functionname(arg1, arg2=v, *args, *, nkw, **kw):
“函数_文档字符串”
function_suite
return [expression]
*, nkw
- 命名关键字参数,用户想要输入的关键字参数,定义方式是在nkw 前面加个分隔符*
。- 如果要限制关键字参数的名字,就可以用「命名关键字参数」
- 使用命名关键字参数时,要特别注意不能缺少参数名。
【例子】
#%%
def printinfo(arg1, *, nkw, **kwargs):
print(arg1)
print(nkw)
print(kwargs)
printinfo(70, nkw=10, a=1, b=2)
70
10
{‘a’: 1, ‘b’: 2}
printinfo(70, 10, a=1, b=2)
TypeError: printinfo() takes 1 positional argument but 2 were given
#%% md
- 没有写参数名
nwk
,因此 10 被当成「位置参数」,而原函数只有 1 个位置函数,现在调用了 2 个,因此程序会报错。
6. 参数组合
在 Python 中定义函数,可以用位置参数、默认参数、可变参数、命名关键字参数和关键字参数,这 5 种参数中的 4 个都可以一起使用,但是注意,参数定义的顺序必须是:
- 位置参数、默认参数、可变参数和关键字参数。
- 位置参数、默认参数、命名关键字参数和关键字参数。
要注意定义可变参数和关键字参数的语法:
*args
是可变参数,args
接收的是一个tuple
**kw
是关键字参数,kw
接收的是一个dict
命名关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。定义命名关键字参数不要忘了写分隔符 *
,否则定义的是位置参数。
警告:虽然可以组合多达 5 种参数,但不要同时使用太多的组合,否则函数很难懂。
函数的返回值
【例子】
#%%
def add(a, b):
return a + b
print(add(1, 2)) # 3
print(add([1, 2, 3], [4, 5, 6])) # [1, 2, 3, 4, 5, 6]
#%% md
【例子】
#%%
def back():
return [1, ‘小马的程序人生’, 3.14]
print(back()) # [1, ‘小马的程序人生’, 3.14]
#%% md
【例子】
#%%
def back():
return 1, ‘小马的程序人生’, 3.14
print(back()) # (1, ‘小马的程序人生’, 3.14)
#%% md
【例子】
#%%
def printme(str):
print(str)
temp = printme(‘hello’) # hello
print(temp) # None
print(type(temp)) # <class ‘NoneType’>
#%% md