
01
引言
我已经用Python编程5年了(从2017年开始),直到最近才知道以下几个Python中不常见的用法,确实和人们对直观理解有所出入。
闲话少说,我们直接开始吧!
02
类中的私有变量不是真正的私有
class Dog():def __init__(self, name):self.__name = name@propertydef name(self):return self.__name
在上述Dog类中,__name属性有getter方法,但没有setter方法。按照一般理解,我们作为用户应该只能通过成员函数name()来读取属性__name的值,而无法直接为Dog对象设置新的名称。但该私有变量并不是看上去那么私有。
dog = Dog("rocky")print(dog.__dict__) # {'_Dog__name': 'rocky'}
如上所示,类的__dict__属性包含了该对象的所有属性。通过使用__dict__属性,我们甚至可以控制那些不应该访问的私有变量和属性。
样例如下:
dog.__dict__["_Dog__name"] = "fifi"print(dog.name)# fifi
03
Python中的无穷大表示
我们使用关键字inf来表示无穷大,代码如下:
a = float("inf")b = float("-inf")print(a, b) # inf -inf
print(10**100000 > float("inf")) # Falseprint(-(10**10000) < float("-inf")) # False
04
可以使用类作为装饰器
假设我们有一个简单的函数,用来实现向某人问好的功能:
def hello(name):return "hello " + nameprint(hello("fifi")) # hello fifi
class append():def __init__(self, char):self.char = chardef __call__(self, function):def inner(*args):return function(*args) + self.charreturn inner@append("!")def hello(name):return "hello " + nameprint(hello("fifi")) # hello fifi!
@append("?")@append("!")def hello(name):return "hello " + nameprint(hello("fifi")) # hello fifi!?
05
汉字用作变量名
哈哈哈,在Python中也可以使用汉字作为变量名,举例如下:
我 = 4你 = 5print(我 + 你) # 9
我没有尝试过使用Python语言中的这个特性,但如果你尝试了,请告诉我。虽然这不是一个非常有用的知识(除非你真的想惹同事生气)。
06
使用eval()在字符串中运行Python代码
x = 4y = eval("x + 10")print(y) # 14
string = "print('hello world')"eval(string)string = "1+2+3"eval(string)
07
总结
您学废了嘛?
点击上方小卡片关注我
寄语:
所求皆如愿,
所行皆坦途。
多喜乐,长安宁。

