1. 引言
我已经用Python编程5年了(从2017年开始),直到最近才知道以下几个Python中不常见的用法,确实和人们对直观理解有所出入。
闲话少说,我们直接开始吧!
2. 类中的私有变量不是真正的私有
我们直接上例子,如下:
class Dog():
def __init__(self, name):
self.__name = name
@property
def 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
3. Python中的无穷用法
我们使用关键之inf
来表示无穷大,代码如下:
a = float("inf")
b = float("-inf")
print(a, b) # inf -inf
我们可以在Python中创建无穷大(和无穷小)的值。每个可显示表示的数值都小于inf且大于-inf,如下:
print(10**100000 > float("inf")) # False
print(-(10**10000) < float("-inf")) # False
4. 可以使用类作为装饰器
假设我们有一个简单的函数,用来实现向某人问好的功能:
def hello(name):
return "hello " + name
print(hello("fifi")) # hello fifi
让我们编写decorator类,并在定义hello函数时使用它,如下:
class append():
def __init__(self, char):
self.char = char
def __call__(self, function):
def inner(*args):
return function(*args) + self.char
return inner
@append("!")
def hello(name):
return "hello " + name
print(hello("fifi")) # hello fifi!
我们也可以在一个函数上使用多次修饰器:
@append("?")
@append("!")
def hello(name):
return "hello " + name
print(hello("fifi")) # hello fifi!?
5. 汉字用作变量名
哈哈哈,在Python中也可以使用汉字作为变量名,举例如下:
我 = 4
你 = 5
print(我 + 你) # 9
我没有尝试过使用Python语言中的这个特性,但如果你尝试了,请告诉我。虽然这不是一个非常有用的知识(除非你真的想惹同事生气)。
6. 使用eval()在字符串中运行Python代码
我们可以使用Python
内置的eval()
函数来以字符串的形式运行Python代码,代码如下:
x = 4
y = eval("x + 10")
print(y) # 14
一个更复杂的例子如下:
string = "print('hello world')"
eval(string) # prints hello world
string = "1+2+3"
eval(string) # returns 6
7. 总结
我直到最近才知道上述这些在Python中不常见的用法(我可能早该知道,但事实就是这样), 希望这篇文章可以给大家带来帮助。