• Python语言及其应用


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

    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
    • 3
    • 4
    • 5
    • 6
    • 7
    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
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    可以看到knights和knights2的不同点:

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

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

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

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

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

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

    5. 命令行参数

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

    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属性
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    最后一行则把这两个方法定义为了 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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    另一种定义属性的方式是使用修饰符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'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    向量空间概述
    小学教育怎么选择特别容易写的论文选题?
    kafka生产者如何提高吞吐量
    一文彻底搞懂BJT及其放大特性(图解说明)
    logistic挤压型激活函数(机器学习)
    个人练习-PAT甲级-1143 Lowest Common Ancestor
    【深度学习】卷积神经网络CNN
    okhttp添加公共参数
    Datawhale 2024 年 AI 夏令营第二期——基于术语词典干预的机器翻译挑战赛
    大都会人寿线下培训第三天回顾(爱的书信)及线上课程笔记
  • 原文地址:https://blog.csdn.net/weixin_43845922/article/details/126643694