Python语言及其应用

  1. 使用*搜集位置参数
def print_args(*args):
... print('Positional argument tuple:', args

args是传入到函数的参数值的元组,给函数传入的所有参数都会以元组的形式返回输出:

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

  2. 内部函数
    在 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!'"
  1. 闭包
  2. 内部函数可以看作一个闭包。闭包是一个可以由另一个函数动态生成的函数,并且可以改
    变和存储函数外创建的变量的值。
>>> 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的不同点:

  • inner2()直接使用外部的saying参数
  • knights2()返回值为inner2函数,而不是调用它

函数名后面加上()才叫调用此函数

  1. 匿名函数:lambda()函数

  2. 生成器
    是用来创建 Python 序列的一个对象。使用它可以迭代庞大的序列,且不需要在内
    存中创建和存储整个序列。

  3. 装饰器
    有时你需要在不改变源代码的情况下修改已经存在的函数。装饰器实质上是一个函数。它把一个函数作为输入并且返回另外一个函数

  4. 全局变量
    python想在函数内部修改全局变量的值,需声明关键字global

  5. 命令行参数

import sys 
print("Program arguments:", sys.argv)

  1. 为了使 Python应用更具可扩展性,你可以把多个模块组织成文件层次,称之为包

python中random.choice的用法:
choice(a, size=None, replace=True, p=None)
参数说明:
a:指明随机变量所有可能的取值
size:表明索要生成的随机数数组的大小
replace:决定生成随机数时是否有放回的
p:为一个与x等长的向量,指定了每种结果出现的可能性

  1. 使用属性对特性进行访问和设置
    python中所有特性都是公开的,如果不放心直接访问对象的特性,可以为对象编写setter和getter方法。但更具python风格的解决方案是使用属性property
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(), 但包含不同的修饰符

  • @property, 用于指示getter方法
  • @name.setter, 用于指示setter方法
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'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值