我已经阅读了几个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是相同还是不同?
如果没有,最好的方法是什么?
现在我正在做(对于django项目):
if not 'thing_for_purpose' in request.session:
request.session['thing_for_purpose'] = 5
Run Code Online (Sandbox Code Playgroud)
但它很尴尬.在Ruby中它将是:
request.session['thing_for_purpose'] ||= 5
Run Code Online (Sandbox Code Playgroud)
这更好.
说我有这个简单的python脚本:
file = open('C:\\some_text.txt')
print file.readlines()
print file.readlines()
Run Code Online (Sandbox Code Playgroud)
运行时,第一个打印件打印包含文件文本的列表,而第二个打印件打印空白列表.我想这并不完全出乎意料.但有没有办法"回卷"文件,以便我可以再次阅读?或者是重新打开它的最快方式?
这是一个python新手问题:
我有以下目录结构:
test
-- test_file.py
a
-- b
-- module.py
Run Code Online (Sandbox Code Playgroud)
其中test,a和b是文件夹.双方test并a都在同一水平上.
module.py有一个名为的类shape,我想在test_file.py中实例化它的一个实例.我怎么能这样做?
我试过了:
from a.b import module
Run Code Online (Sandbox Code Playgroud)
但我得到了:
ImportError: No module named a.b
Run Code Online (Sandbox Code Playgroud) 一位朋友(低级技能级别的娱乐python脚本编写者)让我查看一些代码.我注意到他有7个单独的陈述,基本上说.
if ( a and b and c):
do something
Run Code Online (Sandbox Code Playgroud)
陈述a,b,c都测试了它们的相等或缺乏设定值.当我看到它时,我发现由于测试的性质,我可以将整个逻辑块重写为2个分支,从不超过3个深度并且很少超过第一个级别(进行最罕见的测试)第一).
if a:
if b:
if c:
else:
if c:
else:
if b:
if c:
else:
if c:
Run Code Online (Sandbox Code Playgroud)
对我来说,从逻辑上讲,如果你做的更少,更简单的测试更快失败并继续前进,它似乎应该更快.我真正的问题是
1)当我说if if时,如果if为真,那么else会被完全忽略吗?
2)理论上会
如果(a和b和c)
花三倍于单独的if语句会花多少时间?
有没有办法使用语法迭代文本文件,
with open(filename,'r') as f:
for line in f:
print f
Run Code Online (Sandbox Code Playgroud)
如果文件只包含回车符而没有换行符?
到目前为止,我所能做的就是
with open(filename,'r') as f:
for line in f.read().split('\r'):
print f
Run Code Online (Sandbox Code Playgroud)
但文件有时很大.我不想使用dos2unix修改文件,因为另一个软件程序需要原始格式.
这是地球上最大的新手问题,但我不确定.我写了一堆执行某些任务的函数,我想要一个"主"函数,例如,当我调用"someProgram.py"时,运行function1,function2并退出.我依稀记得有关" 主要 "的事情,但我不知道.
我有一个包含许多线程的python程序.我正在考虑创建一个套接字,将其绑定到localhost,并让线程读/写到这个中心位置.但是我不希望这个套接字打开网络的其余部分,只127.0.0.1接受来自的连接.我将如何做到这一点(在Python中)?这是一个合适的设计吗?还是有点优雅的东西?
我创建了一个名为foo_module.py包含以下代码的文件:
import shelve, whichdb, os
from foo_package.g import g
g.shelf = shelve.open("foo_path")
g.shelf.close()
print whichdb.whichdb("foo_path") # => dbhash
os.remove("foo_path")
Run Code Online (Sandbox Code Playgroud)
在该文件旁边,我创建了一个名为foo_packagethan 的目录,其中包含一个空__init__.py文件和一个名为g.pyjust 的文件:
class g:
pass
Run Code Online (Sandbox Code Playgroud)
现在,当我运行时,foo_module.py我得到一个奇怪的错误消息:
Exception TypeError: "'NoneType' object is not callable" in ignored
但是,如果我将目录重命名foo_package为foo,并更改导入行foo_module.py,我不会收到任何错误.Wtf在这里发生了什么?
在WinXP上运行Python 2.6.4.
我正在使用Django应用程序将字符串导出到CSV文件.该字符串是通过前端表单提交的消息.但是,当输入中提供了unicode单引号时,我一直收到此错误.
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019'
in position 200: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用下面的代码将unicode转换为ascii,但仍然会出现类似的错误.
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-9: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我已经筛选了几十个网站并学到了很多关于unicode的知识,但是,我仍然无法将这个unicode转换为ascii.我不在乎算法是否删除了unicode字符.注释的行表示我尝试过的各种选项,但错误仍然存在.
import csv
import unicodedata
...
#message = unicode( unicodedata.normalize(
# 'NFKD',contact.message).encode('ascii','ignore'))
#dmessage = (contact.message).encode('utf-8','ignore')
#dmessage = contact.message.decode("utf-8")
#dmessage = "%s" % dmessage
dmessage = contact.message
csv_writer.writerow([
dmessage,
])
Run Code Online (Sandbox Code Playgroud)
有没有人有任何关于删除unicode字符的建议我可以将它们导出为CSV?这个看似简单的问题让我头晕目眩.任何帮助深表感谢.谢谢,乔