要将某些数字打印为二进制格式,我们只需使用.format()
方法,如下所示:
# Binary
for i in range(5+1):
print("{0:>2} in binary is {0:>08b}".format(i))
0 in binary is 00000000
1 in binary is 00000001
2 in binary is 00000010
3 in binary is 00000011
4 in binary is 00000100
5 in binary is 00000101
类似的格式用于其他格式(十六进制和八进制)的打印,只需要将后者的花括号替换为我们要打印的数字即可。但是,是否可以使用新的f""
字符串替换.format()
命令?我知道这看似微不足道,但我在使用新功能时遇到了麻烦,除了f""
使得代码更短,更易读。
for i in range(5+1):
print(f'{0:>2} in binary is {0:>08b}')
# This prints out just 0s
答案 0 :(得分:2)
您的f字符串中应该包含表达式而不是索引:
f'{i:>2} in binary is {i:>08b}'
在原始格式字符串中有0
的任何地方都应替换为实际的第一个参数:在这种情况下为i
。
注意事项
f字符串中的表达式被求值两次,但是format
的参数在通过索引访问时仅被求值一次。这对于更复杂的表达式很重要。例如:
"{0:>2} in binary is {0:>08b}".format(i + 10)
这里的加法i + 10
仅发生一次。另一方面
f"{i+10:>2} in binary is {i+10:>08b}"
进行两次加法,因为它等同于
"{:>2} in binary is {:>08b}".format(i + 10, i + 10)
或
"{0:>2} in binary is {1:>08b}".format(i + 10, i + 10)
解决方法是预先计算在f字符串中多次出现的表达式的结果:
j = i + 10
f"{j:>2} in binary is {j:>08b}"
现在j
被多次评估,但这只是一个简单的参考。
答案 1 :(得分:0)
这是我的看法:
在旧的from selenium import webdriver
from PIL import Image
from io import BytesIO
url = 'https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576'
chrome = webdriver.Chrome('path/to/chromedriver')
chrome.get(url)
png = chrome.get_screenshot_as_png()
im = Image.open(BytesIO(png))
im.save('output.png')
chrome.quit()
中,0表示传递给format函数的第一个元素。 .format()
。两次使用0两次来访问第一个变量。另一种编写方式是:"{0:>2} in binary is {0:>08b}".format(i)
省略索引。
在新的"{:>2} in binary is {:>08b}".format(i,i)
格式中,我们改为传递变量/表达式。