Python 小招数

Python 小招数: 常用特性

人要有毅力,否则一事无成 – 居里夫人

连续赋值

  • 连续赋值的时候是从右边向左边依次赋值

a=b=c=1

# 结果
# c=1 b=c a=b

拆包

  • 多个变量多个值可以用一个赋值符号(=)做到同时赋值.赋值时,将依据位置关系,将=右侧的值分别赋值给左侧的变量

a,b = 1,2

# 等价于 a=1 b=2

上面也等效于


a,b=(1,2)

# 结果 a = 1 b=2

也等价于


a,b = [1,2]

# 结果 a=1 b=2

像这种操作我们管这种叫做拆包

  • 同理下面也一样

a,*b=[1,2,3,4]

# 结果 a=1 b = [2,3,4]

a,b = '12'

# 结果a =1 b=2

a,b = {1:'a',2:'b'} # 特别注意的就是字典拆包拆出来的是每个键

# 结果 a =1 b =2

拆包时 = 右侧的序列的长度需要与左侧的变量个数相同,如果不同,可以使用 *变量的形式一次性接受多个参数


a,*b,c=(1,2,3,4)

# 结果 a=1 c =4 b = [2,3]

for else 语句(用的太少了)

  • 例如

for i in range(5):
   print(i)
else:
   print('所有项目被迭代使用')

# 结果
# 0
# 1
# 2
# 3
# 4
# 所有项被迭代

可以看到当 for 循环中所有的项被循环完了之后才继续执行 else 语句

  • 但是这里并不是每次都执行,只有当 for 循环没有被 break 的时候才继续执行后续的 else 代码

for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print('所有项被迭代使用')


# 结果
# 0
# 1
# 2

类相关

类属性/对象属性动态绑定

  • @property

装饰器@property 可以将类中的方法转换为属性


class A:
   @property
   def apple(self):
     return 'apple'

被@property 装饰的方法可以像属性一样使用,但是只能是只读的,不能被修改,否则爆错误


class A:
   @property
   def apple(self):
     return 'apple'

a =A()
a.apple = 'black'

# 结果 直接报错

如果必须要求属性更改的话,必须在添加一个 setter 方法


class A:
    @property
    def apple(self):
        return self._apple

    @apple.setter
    def apple(self, value):
        self._apple = value


a = A()
a.apple = 'black'

print(a.apple)

# 结果black

这里的关键是必须要用@property 装饰一个方法,会自动生成名为@方法名.setter 的装饰器

函数相关

函数参数类型写法


def say_hello(name:str):
    print(name,'hello')

Python 并不会对参数类型校验,这里是为了方便阅读

函数返回值类型标注


def say_hello(name)->str:
    print(name,'hello')

文章作者: 雾烟云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 雾烟云 !
  目录