我已经阅读了几个python教程(Dive Into Python,一个),以及Python.org上的语言参考 - 我不明白为什么语言需要元组.
与列表或集合相比,元组没有方法,如果我必须将元组转换为集合或列表以便能够对它们进行排序,那么首先使用元组有什么意义呢?
不变性?
为什么有人关心变量是否存在于内存中的不同位置而不是最初分配的位置?这整个Python的不变性业务似乎过分强调.
在C/C++中,如果我分配一个指针并指向一些有效的内存,我不关心地址的位置,只要在我使用它之前它不是null.
每当我引用该变量时,我都不需要知道指针是否仍然指向原始地址.我只是检查null并使用它(或不使用).
在Python中,当我分配一个字符串(或元组)将其分配给x时,然后修改字符串,为什么我关心它是否是原始对象?只要变量指向我的数据,那就重要了.
>>> x='hello'
>>> id(x)
1234567
>>> x='good bye'
>>> id(x)
5432167
Run Code Online (Sandbox Code Playgroud)
x
仍然引用我想要的数据,为什么有人需要关心它的id是相同还是不同?
我正在尝试在Python 3应用程序中使用argparse,其中有明确的选择列表,但如果没有指定,则为默认值.
我的代码是:
parser.add_argument('--list', default='all', choices=['servers', 'storage', 'all'], help='list servers, storage, or both (default: %(default)s)')
args = parser.parse_args()
print(vars(args))
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我得到以下选项:
$ python3 ./myapp.py --list all
{'list': 'all'}
Run Code Online (Sandbox Code Playgroud)
或者没有选项:
$ python3 ./myapp.py --list
usage: myapp.py [-h] [--list {servers,storage,all}]
myapp.py: error: argument --list: expected one argument
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?或者我可以没有指定选项的默认值吗?
还有其他目的(除了那里因为它需要)空元组可能有吗?或者:你会用什么空元组?如果有什么.我只是找不到答案(好吧,一个肯定的答案,如:"是的,有"),请帮助我解决这个问题."用于测试另一个元组是否为空"不是一个可接受的答案,因为我们应该使用'not'运算符.
在python文档列表中定义为:
可变序列,通常用于存储同类项目的集合(其中精确的相似程度将因应用而异).
为什么它用于存储同类商品的集合?
字符串和int项是否同质?
a = [12,"hello"]
Run Code Online (Sandbox Code Playgroud) 我试图计算可变大小数组的起源和偏移量,并将它们存储在字典中.这是我实现这一目标的非pythonic方式.我不确定我是否应该使用map,lambda函数或列表推导来使代码更加pythonic.
基本上,我需要根据总大小来剪切数组的块,并将xstart,ystart,x_number_of_rows_to_read,y_number_of_columns_to_read存储在字典中.总大小是可变的.我无法将整个数组加载到内存中并使用numpy索引或我肯定会.原点和偏移用于使数组变成numpy.
intervalx = xsize / xsegment #Get the size of the chunks
intervaly = ysize / ysegment #Get the size of the chunks
#Setup to segment the image storing the start values and key into a dictionary.
xstart = 0
ystart = 0
key = 0
d = defaultdict(list)
for y in xrange(0, ysize, intervaly):
if y + (intervaly * 2) < ysize:
numberofrows = intervaly
else:
numberofrows = ysize - y
for x in xrange(0, xsize, intervalx):
if …
Run Code Online (Sandbox Code Playgroud) 我想知道是否有任何好的理由在python if
语句中更喜欢列表而不是元组,反之亦然.因此,以下功能相同,但在性能和编码风格方面优于另一个,还是无关紧要?
if x in (1,2,3):
foo()
if x in [1,2,3]:
foo()
Run Code Online (Sandbox Code Playgroud)
我似乎已经养成了使用元组的习惯,如果有2或3个值和列表的任何更长的时间,我认为因为根据我的经验,元组往往很短并列出很长,但这似乎有点武断,可能不必要地不一致.
我会对人们可以给出的任何一个比另一个更好的例子感兴趣.
干杯
python中数据对象的普通样式是什么。可以说我有一种方法可以从某个地方(网络,数据库等)获取客户,我应该返回哪种类型的对象。我看到几种选择:
我敢肯定还有其他人。做我的第一个大型python项目,因此想从一开始就使用最佳实践
哇-对这个问题的负面反应感到惊讶。也许不清楚
我有很多要传递给我的代码的不同数据项。用户,产品,客户,订单等(实际上,它们并非如此,而是简单易懂的事物类型)。所以我有
def get_user():
return x
Run Code Online (Sandbox Code Playgroud)
x应该是什么。类的实例,称为用户,字典,元组...
没有与对象关联的方法,纯数据
似乎namedtuple是要走的路
编辑:如何作为一种样式
class product:
pass
...
def get_product():
... db read stuff
pr = product()
pr.name = dbthing[0]
pr.price = dbthing[1]
return pr
Run Code Online (Sandbox Code Playgroud)
那是酒吧诱导或成熟的风格,还是奇怪或什么?有用。从消费者的角度来看,它使代码更加可读
def xxx():
pr = get_product()
total = amount * pr.price
Run Code Online (Sandbox Code Playgroud) 在python中,list
数据结构是一系列元素.类似地,a tuple
也是一系列元素,然而,元组是immutable
.
是什么原因产生了这样一个类似的数据结构,那就是只有功能,而不是列表,它是不能改变的?它是否可以通过不可变来节省内存空间?
此外,如果列表和元组包含完全相同的数据,它们是否会在内存中使用相同的空间量?
我有这些清单:
sqvaluelist = []
valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]
Run Code Online (Sandbox Code Playgroud)
我想在valuelist上应用此代码:
for value in valuelist:
valuesquared = value*value
sqvaluelist.append(valuesquared,)
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
TypeError: can't multiply sequence by non-int of type 'tuple'
我想我知道这个错误背后的原因,这是因为每个值都在一个单独的元组中.
我的问题是,是否有任何方法可以将这些值从各自的元组中删除,然后将它们转换为类似的列表
valuelist = [10.5, 20.5, 21.5, 70.0, 34.5]
Run Code Online (Sandbox Code Playgroud)
没有手动编辑现有列表的结构,以便可以执行for循环?
编辑:我道歉!他们实际上是元组!在每个值后添加逗号.抱歉!
在Python3.2中我正在尝试做一个列表:
>> ls = 1, 2, 3
>> ls
(1, 2, 3)
>> ls.append(4)
Run Code Online (Sandbox Code Playgroud)
使用这最后一个命令,我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我该如何解决?谢谢你的时间
file = ('cropdata.txt')
Run Code Online (Sandbox Code Playgroud)
我不确定是什么元组.这是file
一个元组?元组与列表或字符串有何不同?
python ×13
list ×6
tuples ×5
argparse ×1
arrays ×1
if-statement ×1
immutability ×1
methods ×1
numpy ×1
performance ×1
python-3.x ×1