python内置函数 P
Python 解释器内置了很多函数和类型,任何时候都能使用。
P
名称 | 描述 |
---|---|
pow | 计算一个数的幂。 |
在控制台上输出文本或变量的值。 | |
property | 创建属性(attribute)的内置函数。 |
pow(base, exp, mod=None)
pow()
是 Python 中的一个内置函数,用于计算一个数的幂。这个函数接受两个参数,第一个参数是基数,第二个参数是指数,并返回基数的指数次幂。
返回 base 的 exp 次幂;如果 mod 存在,则返回 base 的 exp 次幂对 mod 取余(比 pow(base, exp) % mod
更高效)。 两参数形式 pow(base, exp)
等价于乘方运算符: base**exp
。
参数必须为数值类型。 对于混用的操作数类型,则适用二元算术运算符的类型强制转换规则。 对于 int
操作数,结果具有与操作数相同的类型(转换后),除非第二个参数为负值;在这种情况下,所有参数将被转换为浮点数并输出浮点数结果。 例如,pow(10, 2)
返回 100
,但 pow(10, -2)
返回 0.01
。 对于 int
或 float
类型的负基和一个非整数的指数,会产生一个复数作为结果。 例如, pow(-9, 0.5)
返回一个接近于 3j
的值。
对于 int
操作数 base 和 exp,如果给出 mod,则 mod 必须为整数类型并且 mod 必须不为零。 如果给出 mod 并且 exp 为负值,则 base 必须相对于 mod 不可整除。 在这种情况下,将会返回 pow(inv_base, -exp, mod)
,其中 inv_base 为 base 的倒数对 mod 取余。
下面的例子是 38
的倒数对 97
取余:
>>> pow(38, -1, mod=97)
23
>>> 23 * 38 % 97 == 1
True
在 3.8 版本发生变更: 对于 int
操作数,三参数形式的 pow
现在允许第二个参数为负值,即可以计算倒数的余数。
在 3.8 版本发生变更: 允许关键字参数。 之前只支持位置参数。
# 计算 2 的 3 次方
result = pow(2, 3)
print(result) # 输出:8 # 计算 5 的 0 次方
result = pow(5, 0)
print(result) # 输出:1,任何非零数的 0 次方都是 1# 计算负数的偶数次方
result = pow(-2, 2)
print(result) # 输出:4,-2 的平方是 4 # 计算负数的奇数次方
result = pow(-2, 3)
print(result) # 输出:-8,-2 的立方是 -8# 计算 (2^3) mod 7
result = pow(2, 3, 7)
print(result) # 输出:1,因为 2^3 = 8,而 8 mod 7 = 1
print(*objects, sep=’ ', end=‘\n’, file=None, flush=False)
将 objects 打印输出至 file 指定的文本流,以 sep 分隔并在末尾加上 end。 sep 、 end 、 file 和 flush 必须以关键字参数的形式给出。
所有非关键字参数都会被转换为字符串,就像是执行了 str()
一样,并会被写入到流,以 sep 分隔并在末尾加上 end。 sep 和 end 都必须为字符串;它们也可以为 None
,这意味着使用默认值。 如果没有给出 objects,则 print()
将只写入 end。
file 参数必须是一个具有 write(string)
方法的对象;如果参数不存在或为 None
,则将使用 sys.stdout
。 由于要打印的参数会被转换为文本字符串,因此 print()
不能用于二进制模式的文件对象。 对于这些对象,应改用 file.write(...)
。
输出缓冲通常由 file 确定。 但是,如果 flush 为真值,流将被强制刷新。
在 3.3 版本发生变更: 增加了 flush 关键字参数。
print("apple", "banana", "cherry", sep=', ')
print("This is the first line.", end='')
print("This is on the same line.")# 输出结果:
apple, banana, cherry
This is the first line.This is on the same line.
property(fget=None, fset=None, fdel=None, doc=None)
class property(fget=None, fset=None, fdel=None, doc=None)
property()
函数是用于创建属性(attribute)的内置函数。属性允许你将一个方法(通常是getter、setter和deleter方法)作为一个类的实例属性来访问。
返回 property 属性。
fget 是获取属性值的函数。 fset 是用于设置属性值的函数。 fdel 是用于删除属性值的函数。并且 doc 为属性对象创建文档字符串。
一个典型的用法是定义一个托管属性 x
:
class C:def __init__(self):self._x = Nonedef getx(self):return self._xdef setx(self, value):self._x = valuedef delx(self):del self._xx = property(getx, setx, delx, "I'm the 'x' property.")
如果 c 为 C 的实例,c.x
将调用 getter,c.x = value
将调用 setter, del c.x
将调用 deleter。
如果给出,doc 将成为该 property 属性的文档字符串。 否则该 property 将拷贝 fget 的文档字符串(如果存在)。 这令使用 property()
作为 decorator 来创建只读的特征属性可以很容易地实现:
class Parrot:def __init__(self):self._voltage = 100000@propertydef voltage(self):"""Get the current voltage."""return self._voltage
@property
装饰器会将 voltage()
方法转化为一个具有相同名称的只读属性 “getter”,并将 voltage 的文档字符串设为 “Get the current voltage.”
@getter
@setter
@deleter
特征属性对象具有 getter
, setter
和 deleter
方法,它们可用作装饰器来创建该特征属性的副本,并将相应的访问函数设为所装饰的函数。 这最好是用一个例子来说明:
class C:def __init__(self):self._x = None@propertydef x(self):"""I'm the 'x' property."""return self._x@x.setterdef x(self, value):self._x = value@x.deleterdef x(self):del self._x
上述代码与第一个例子完全等价。 注意一定要给附加函数与原始的特征属性相同的名称 (在本例中为 x
。)返回的特征属性对象同样具有与构造器参数相对应的属性 fget
, fset
和 fdel
。
在 3.5 版本发生变更: 特征属性对象的文档字符串现在是可写的。
class Person:def __init__(self, name):self._name = name@propertydef name(self):"""Getter for name."""return self._name@name.setterdef name(self, value):"""Setter for name."""if not isinstance(value, str):raise TypeError("Name must be a string.")self._name = value@name.deleterdef name(self):"""Deleter for name."""del self._name# 使用示例
p = Person("Alice")
print(p.name) # 输出: Alicep.name = "Bob" # 设置新的名字
print(p.name) # 输出: Bobdel p.name # 删除名字属性
在这个例子中,Person
类有一个私有属性_name
,和一个通过@property
装饰器创建的公有属性name
。name
属性有一个getter方法(用于读取属性的值),一个setter方法(用于设置属性的值),和一个deleter方法(用于删除属性)。
当你尝试访问p.name
时,会调用getter方法;当你尝试设置p.name = "Bob"
时,会调用setter方法;当你尝试删除del p.name
时,会调用deleter方法。
参考:内置函数 — Python 3.12.2 文档