我注意到python 3.5和python 3.6增加了很多关于静态类型检查的功能,所以我尝试使用以下代码(在python 3.6中,稳定版本).
from typing import List
a: List[str] = []
a.append('a')
a.append(1)
print(a)
Run Code Online (Sandbox Code Playgroud)
让我感到惊讶的是,python没有给我一个错误或警告,虽然1附加到一个list只应该包含字符串.Pycharm检测到类型错误并给我一个警告,但它并不明显,它没有在输出控制台中显示,我害怕有时我可能会错过它.我想要以下效果:
那可能吗?也许mypy可以做到,但我更喜欢使用python-3.6-style类型检查(比如a: List[str])而不是使用的注释风格(如# type List[str])mypy.而且我很好奇是否在本机python 3.6中有一个切换来实现我上面提到的两点.
m代表什么python3.6m?m版本有何不同?python3.6m而不是python3.6?我想知道为什么repr(int)比快str(int).使用以下代码段:
ROUNDS = 10000
def concat_strings_str():
return ''.join(map(str, range(ROUNDS)))
def concat_strings_repr():
return ''.join(map(repr, range(ROUNDS)))
%timeit concat_strings_str()
%timeit concat_strings_repr()
Run Code Online (Sandbox Code Playgroud)
我得到了这些时间(python 3.5.2,但与2.7.12的结果非常相似):
1.9 ms ± 17.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1.38 ms ± 9.07 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Run Code Online (Sandbox Code Playgroud)
如果我走在正确的道路上,同样的功能long_to_decimal_string就会在引擎盖下面调用.
我错了什么或者我还缺少什么?
更新:这可能没有什么用int的__repr__或__str__方法,但之间的差异repr()和str(),如int.__str__和 …
我为该input()功能提供的输入有多大?
不幸的是,没有简单的方法来测试它.在使用了大量的复制粘贴之后,我input无法在我提供的任何输入上失败.(我最终放弃了)
该文档的input功能,并没有提及关于这样的东西:
如果
prompt参数存在,则将其写入标准输出而不带尾随换行符.然后,该函数从输入中读取一行,将其转换为字符串(剥离尾部换行符),然后返回该行.读取EOF时,EOFError会引发.
那么,我猜是没有限制的?有没有人知道是否有,如果有,多少钱?
可以通过两种方式分割白色空间str.strip.您可以发出不带参数的调用str.strip(),默认情况下使用空格分隔符或自己显式提供参数str.strip(' ').
但是,为什么在定时时这些功能的表现如此不同?
使用具有有意量的空格的示例字符串:
s = " " * 100 + 'a' + " " * 100
Run Code Online (Sandbox Code Playgroud)
时间s.strip()和时间s.strip(' ')分别为:
%timeit s.strip()
The slowest run took 32.74 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 396 ns per loop
%timeit s.strip(' ')
100000 loops, best of 3: 4.5 µs per loop
Run Code Online (Sandbox Code Playgroud)
strip需要396ns而strip(' ')采用4.5 …
我正在浏览一些代码,我注意到一条引起我注意的线.代码类似于下面的示例
class MyClass:
def __init__(self):
pass
def call_me(self=''):
print(self)
Run Code Online (Sandbox Code Playgroud)
这看起来像我见过的任何其他类,但是str作为默认值传入的是self.
如果我打印出来self,它就像正常一样
>>> MyClass().call_me()
<__main__.MyClass object at 0x000002A12E7CA908>
Run Code Online (Sandbox Code Playgroud)
这一直困扰着我,我无法弄清楚为什么会这样.是否有任何理由将str实例作为默认值传入self?
Python如何为大整数分配内存?
一个int类型的大小28 bytes和随着我不断增加的值int,大小以增量为单位增加4 bytes.
为什么28 bytes最初的价值低至何1?
为什么增量4 bytes?
PS:我在x86_64(64位机器)上运行Python 3.5.2.关于(3.0+)解释器如何处理如此庞大的数字的任何指针/资源/ PEP都是我正在寻找的.
代码说明尺寸:
>>> a=1
>>> print(a.__sizeof__())
28
>>> a=1024
>>> print(a.__sizeof__())
28
>>> a=1024*1024*1024
>>> print(a.__sizeof__())
32
>>> a=1024*1024*1024*1024
>>> print(a.__sizeof__())
32
>>> a=1024*1024*1024*1024*1024*1024
>>> a
1152921504606846976
>>> print(a.__sizeof__())
36
Run Code Online (Sandbox Code Playgroud) 我目前正在参加Udacity课程,该课程指导学生使用Python进行编程.其中一个项目让学生重命名目录中的照片文件(删除名称中的任何数字),以便按字母顺序排列文件,之后将拼写出一条秘密信息.例如,如果文件名是"48athens",则程序试图删除数字,仅保留"athens"为文件名.
我使用的是Python 3.6,而课程讲师使用的是Python 2.7.我应该使用Python 2.7来简化学习过程.但是,现在我将继续使用Python 3.6.
教师重命名文件的方式是使用.translate函数,它在Python 2.x中使用两个参数,而Python 3.x只使用一个参数.它从文件名中删除任何数字(0到9).
import os
def rename_files(): #Obtain the file names from a folder.
file_list = os.listdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank")
print (file_list)
saved_path = os.getcwd()
os.chdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank")
for file_name in file_list: #Rename the files inside of the folder.
os.rename(file_name, file_name.translate(None, "0123456789"))
os.chdir(saved_path)
rename_files()
Run Code Online (Sandbox Code Playgroud)
但是,这在Python 3.x中不起作用,因为它说:
TypeError: translate() takes exactly one argument (2 given)
Run Code Online (Sandbox Code Playgroud)
谢天谢地,我找到了另一种使用某人帮助的方法.但是,我不确定它是如何工作的.有人可以str.maketrans向我解释这个功能,引号中的前两个空白参数是什么?我的想法是它说:对于文件名中的前两个字符,删除任何数字(0到9).那是对的吗?例如,"48athens"如果它们是0到9之间的数字,则删除前两个字符(4和8).
import os
def rename_files(): #Obtain the file names from a folder.
file_list = os.listdir(r"C:\Users\Dennis\Desktop\OOP\prank\prank") …Run Code Online (Sandbox Code Playgroud) 我在元组中有一些值,我希望在元素方面添加另一个元组.所以我想要这样的功能:
std::tuple<int,int> a = {1,2};
std::tuple<int,int> b = {2,4};
std::tuple<int,int> c = a + b; // possible syntax 1
a += b; // possible syntax 2
a += {2,4}; // possible syntax 3
Run Code Online (Sandbox Code Playgroud)
输出元组将具有该值的位置 {3,6}
我想知道是否转换为字符串即str(sth)可以引发异常,例如float(sth)吗?我要求知道是否有必要将我的代码包装在:
try:
x = str(value)
except ValueError:
x = None
Run Code Online (Sandbox Code Playgroud)
确保执行不会因转换失败而停止.
这在Python 2和3中也有所不同,因为它们的str类不同吗?
python ×9
python-3.x ×8
string ×4
performance ×2
python-3.6 ×2
c++ ×1
casting ×1
class ×1
function ×1
int ×1
mypy ×1
tuples ×1
type-hinting ×1