Python 中的百分号是什么意思[重复]
- 2025-02-21 08:50:00
- admin 原创
- 8
问题描述:
本教程中有一个查找素数的例子:
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...
我知道 double==
是相等性的测试,但我不明白这if n % x
部分。比如我可以口头说明每个部分并说出该语句对示例的作用。但我不明白百分号是如何落入的。
究竟说了什么if n % x
?
解决方案 1:
% 会根据其参数执行两项操作。在本例中,它充当模运算符,这意味着当其参数为数字时,它会将第一个数字除以第二个数字并返回余数。 34 % 10 == 4
因为 34 除以 10 等于 3,余数为 4。
如果第一个参数是字符串,则使用第二个参数对其进行格式化。这有点复杂,所以我将参考文档,但仅作为示例:
>>> "foo %d bar" % 5
'foo 5 bar'
然而,从Python 3.1开始,字符串格式化行为得到了补充,以支持字符串.format()
机制:
这里描述的格式化操作表现出各种怪癖,导致了许多常见错误(例如无法正确显示元组和字典)。使用较新的
str.format()
界面有助于避免这些错误,并且还提供了一种更强大、更灵活、更可扩展的文本格式化方法。
值得庆幸的是,几乎所有新功能都可以从 Python 2.6 开始使用。
解决方案 2:
模数运算符;计算左侧值除以右侧值的余数。例如:
3 % 1
等于零(因为 3 能被 1 整除)
3 % 2
等于 1(因为 3 除以 2 的余数为 1)。
解决方案 3:
百分比符号代表什么意思?
它是 Python 中的一个运算符,根据上下文可以表示多种含义。后面的很多内容在其他答案中已经提到(或暗示过),但我认为提供更详尽的总结可能会有所帮助。
%
对于数字:模运算/余数/其余
百分号是Python 中的一个运算符。它的描述如下:
x % y remainder of x / y
因此,如果您用 y “整除” x,它会给出余数 。通常(至少在 Python 中)给定一个数字和一个除数:x
`y`
x == y * (x // y) + (x % y)
例如,如果将 5 除以 2:
>>> 5 // 2
2
>>> 5 % 2
1
>>> 2 * (5 // 2) + (5 % 2)
5
一般来说,你使用模运算来测试一个数字是否能被另一个数字整除,这是因为一个数字的倍数对该数字取模会返回 0:
>>> 15 % 5 # 15 is 3 * 5
0
>>> 81 % 9 # 81 is 9 * 9
0
这就是它在您的例子中的用法,如果它是另一个数字的倍数(除了它本身和一),它就不能是质数,这就是它的作用:
if n % x == 0:
break
如果您觉得这n % x == 0
不太具描述性,您可以将其放在另一个具有更具描述性名称的函数中:
def is_multiple(number, divisor):
return number % divisor == 0
...
if is_multiple(n, x):
break
is_multiple
也可以用名称或类似名称来代替evenly_divides
。这就是这里要测试的内容。
类似地,它通常用于判断一个数字是“奇数”还是“偶数”:
def is_odd(number):
return number % 2 == 1
def is_even(number):
return number % 2 == 0
在某些情况下,当需要环绕(循环)行为时,它还用于数组/列表索引,然后只需将“索引”除以“数组长度”即可实现:
>>> l = [0, 1, 2]
>>> length = len(l)
>>> for index in range(10):
... print(l[index % length])
0
1
2
0
1
2
0
1
2
0
请注意,标准库中也有此运算符的函数operator.mod
(及别名operator.__mod__
):
>>> import operator
>>> operator.mod(5, 2) # equivalent to 5 % 2
1
但还有增强赋值%=
,将结果分配回变量:
>>> a = 5
>>> a %= 2 # identical to: a = a % 2
>>> a
1
%
对于字符串:printf
-style 字符串格式
对于字符串来说,含义完全不同,只有一种方法(在我看来是最有限和最丑陋的)进行字符串格式化:
>>> "%s is %s." % ("this", "good")
'this is good'
这里%
字符串中的 表示占位符,后面跟着格式规范。在本例中,我使用了%s
,表示它需要一个字符串。然后字符串后面跟着 ,%
表示左侧的字符串将被右侧格式化。在本例中,第一个%s
被第一个参数替换this
,第二个%s
被第二个参数替换(good
)。
请注意,有更好的(可能是基于观点的)方法来格式化字符串:
>>> "{} is {}.".format("this", "good")
'this is good.'
%
在 Jupyter/IPython 中:魔法命令
引用文档:
对于 Jupyter 用户:Magics 是 IPython 内核特有的,由其提供。Magics 是否可在内核上使用由内核开发人员根据每个内核做出决定。要正常工作,Magics 必须使用在底层语言中无效的语法元素。例如,IPython 内核使用
%
magics 的语法元素,因为%
它在 Python 中不是有效的一元运算符。而该语法元素在其他语言中是有意义的。
这在 Jupyter 笔记本和类似软件中经常使用:
In [1]: a = 10
b = 20
%timeit a + b # one % -> line-magic
54.6 ns ± 2.7 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [2]: %%timeit # two %% -> cell magic
a ** b
362 ns ± 8.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
数组上的运算符%
(在 NumPy / Pandas 生态系统中)
当应用于这些数组时,该%
运算符仍然是模运算符,但它返回一个包含数组中每个元素余数的数组:
>>> import numpy as np
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a % 2
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])
%
为您自己的类定制运算符
当然,您可以自定义当%
运算符应用于您自己的类时它们的工作方式。通常,您只应使用它来实现模运算!但这只是一条指导原则,而不是硬性规定。
仅提供一个简单的例子来说明它是如何工作的:
class MyNumber(object):
def __init__(self, value):
self.value = value
def __mod__(self, other):
print("__mod__ called on '{!r}'".format(self))
return self.value % other
def __repr__(self):
return "{self.__class__.__name__}({self.value!r})".format(self=self)
这个例子其实没什么用,它只是打印然后将运算符委托给存储的值,但它显示了当应用于实例__mod__
时调用:%
>>> a = MyNumber(10)
>>> a % 2
__mod__ called on 'MyNumber(10)'
0
请注意,它也适用于%=
无需明确实现的情况__imod__
:
>>> a = MyNumber(10)
>>> a %= 2
__mod__ called on 'MyNumber(10)'
>>> a
0
但是您也可以__imod__
明确实施以覆盖增强分配:
class MyNumber(object):
def __init__(self, value):
self.value = value
def __mod__(self, other):
print("__mod__ called on '{!r}'".format(self))
return self.value % other
def __imod__(self, other):
print("__imod__ called on '{!r}'".format(self))
self.value %= other
return self
def __repr__(self):
return "{self.__class__.__name__}({self.value!r})".format(self=self)
现在%=
明确覆盖以就地工作:
>>> a = MyNumber(10)
>>> a %= 2
__imod__ called on 'MyNumber(10)'
>>> a
MyNumber(0)
解决方案 4:
虽然这有点偏离主题,因为人们会通过搜索“Python 中的百分号”找到它(就像我一样),但我想指出的是,% 符号也用于在 iPython 中为“魔术”函数添加前缀:https://ipython.org/ipython-doc/3/interactive/tutorial.html#magic-functions
解决方案 5:
在 Python 2.6 中,“%”运算符执行模数运算。我认为他们在 3.0.1 中没有改变它
模运算符告诉您两个数字相除的余数。
解决方案 6:
它检查除法的模数。例如,假设您要遍历从 2 到 n 的所有数字,并检查 n 是否可以被其间的任意数字整除。简而言之,您要检查给定数字 n 是否为素数。(提示:您可以检查到 n/2)。
解决方案 7:
模数运算符。两个数相除后的余数。
例如:
>>> 5 % 2 = 1 # remainder of 5 divided by 2 is 1
>>> 7 % 3 = 1 # remainer of 7 divided by 3 is 1
>>> 3 % 1 = 0 # because 1 divides evenly into 3
解决方案 8:
x % n == 0
这意味着 x/n 和提醒的值将作为结果并与零进行比较......
例如:4/5==0
4/5 提醒是 4
4==0(假)
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)