def print_args(*args):
... print('Positional argument tuple:', args
args是传入到函数的参数值的元组,给函数传入的所有参数都会以元组的形式返回输出:
使用**收集关键字参数
使用两个星号可以将参数收集到一个字典中,参数的名字是字典的键,对应参数的值是字
典的值。
内部函数
在 Python 中,可以在函数中定义另外一个函数。当需要在函数内部多次执行复杂的任务时,内部函数是非常有用的,从而避免了循环和代
码的堆叠重复。
>>>def knights(saying):
... def inner(quote):
... return "We are the knights who say: '%s'" % quote
... return inner(saying)
>>> knights('Ni!')
"We are the knights who say: 'Ni!'"
>>> def knights(saying):
... def inner(quote):
... return "We are the knights who say: '%s'" % quote
... return inner(saying)
...
>>> knights('Ni!')
"We are the knights who say: 'Ni!'"
################################################
>>> def knights2(saying):
... def inner2():
... return "We are the knights who say: '%s'" % saying
... return inner2
...
可以看到knights和knights2的不同点:
函数名后面加上()才叫调用此函数
匿名函数:lambda()函数
生成器
是用来创建 Python 序列的一个对象。使用它可以迭代庞大的序列,且不需要在内
存中创建和存储整个序列。
装饰器
有时你需要在不改变源代码的情况下修改已经存在的函数。装饰器实质上是一个函数。它把一个函数作为输入并且返回另外一个函数
全局变量
python想在函数内部修改全局变量的值,需声明关键字global
import sys
print("Program arguments:", sys.argv)
python中random.choice的用法:
choice(a, size=None, replace=True, p=None)
参数说明:
a:指明随机变量所有可能的取值
size:表明索要生成的随机数数组的大小
replace:决定生成随机数时是否有放回的
p:为一个与x等长的向量,指定了每种结果出现的可能性
class Duck():
def __init__(self, input_name):
self.hidden_name = input_name
def get_name(self):
print('inside the getter')
return self.hidden_name
def set_name(self, input_name):
self.hidden_name = input_name
name = property(get_name, set_name) # 把上面的两个方法定义为了name属性
最后一行则把这两个方法定义为了 name 属性
property()的第一个参数是getter方法,第二个参数是setter方法
当访问Duck类对象的name特性时,get_name()会被自动调用
>>>fowl = Duck('Howard')
>>>fowl.name
inside the getter
'Howard'
#也可以显式调用get_name()方法,就像普通的getter方法一样
>>>fowl.get_name()
inside the getter
'Howard'
# 当对name特性执行赋值操作时,set_name()方法会被调用
>>>fowl.name = 'Daffy'
inside the setter
>>>fowl.name #当访问Duck类对象的name特性时,get_name()会被自动调用
inside the getter
'Daffy'
# 也可以显式调用set_name()方法
>>>fowl.set_name('Daffy')
inside the setter
>>>fowl.name
inside the getter
'Daffy'
另一种定义属性的方式是使用修饰符decorator, 下面的例子中会定义两个不同的方法,它们都叫name(), 但包含不同的修饰符
class Duck():
def __init__(self, input_name):
self.hidden_name = input_name
@property
def name(self):
print('inside the getter')
return self.hidden_name
@name.setter
def name(self, input_name):
print('inside the setter')
self.hidden_name = input_name
# 可以像之前访问特性一样访问name, 但这里没有显示的get_name()和set_name()方法:
>>>fowl = Duck('Howard')
fowl.name
inside the getter
'Howard'
>>>fowl.name = 'Donald'
inside the setter
>>>fowl.name
inside the getter
'Donald'