我需要在Python中创建一个列表列表,所以我输入以下内容:
myList = [[1] * 4] * 3
Run Code Online (Sandbox Code Playgroud)
列表看起来像这样:
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
然后我改变了最里面的一个值:
myList[0][0] = 5
Run Code Online (Sandbox Code Playgroud)
现在我的列表看起来像这样:
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
这不是我想要或期望的.有人可以解释一下发生了什么,以及如何解决这个问题?
我有一个多线程Python程序和一个实用程序函数writeLog(message),它写出一个时间戳后跟消息.不幸的是,结果日志文件没有给出哪个线程正在生成哪个消息的指示.
我希望writeLog()能够在消息中添加一些东西来识别哪个线程正在调用它.显然我可以让线程传递这些信息,但这将是更多的工作.我可以使用一些与os.getpid()等效的线程吗?
我正在尝试编写一个装饰器来做日志记录:
def logger(myFunc):
def new(*args, **keyargs):
print 'Entering %s.%s' % (myFunc.im_class.__name__, myFunc.__name__)
return myFunc(*args, **keyargs)
return new
class C(object):
@logger
def f():
pass
C().f()
Run Code Online (Sandbox Code Playgroud)
我想要打印:
Entering C.f
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
AttributeError: 'function' object has no attribute 'im_class'
Run Code Online (Sandbox Code Playgroud)
据推测,这与'logger'中'myFunc'的范围有关,但我不知道是什么.
我在XP上使用python 2.6.我刚刚安装了py2exe,我可以从hello.py成功创建一个简单的hello.exe.但是,当我尝试在我的真实程序中使用py2exe时,py2exe会产生一些信息消息,但无法在dist文件夹中生成任何内容.
我的setup.py看起来像这样:
from distutils.core import setup
import py2exe
setup(console=['ServerManager.py'])
Run Code Online (Sandbox Code Playgroud)
并且py2exe输出如下所示:
python setup.py py2exe
running py2exe
creating C:\DevSource\Scripts\ServerManager\build
creating C:\DevSource\Scripts\ServerManager\build\bdist.win32
...
...
creating C:\DevSource\Scripts\ServerManager\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'lxml.etree' (C:\Python26\lib\site-packages\lxml\etree.pyd -> lxml.etree.pyd)
...
...
creating python loader for extension 'bz2' (C:\Python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***
Run Code Online (Sandbox Code Playgroud)
py2exe似乎找到了我的所有导入(虽然我有点惊讶看到win32提到,因为我没有明确导入它).此外,我的程序使用此命令非常愉快地启动:
python ServerManager.py
Run Code Online (Sandbox Code Playgroud)
显然我正在做一些根本错误的事情,但是在没有来自py2exe的任何错误消息的情况下我不知道是什么.
我偶尔会看到Python代码中使用的列表切片语法,如下所示:
newList = oldList[:]
Run Code Online (Sandbox Code Playgroud)
当然这与以下相同:
newList = oldList
Run Code Online (Sandbox Code Playgroud)
或者我错过了什么?
我已成功使用转储整个MySQL数据库
mysqldump --databases
Run Code Online (Sandbox Code Playgroud)
生成一个很好的.txt文件.但是,我看不出如何一次性将整个文件读回MySQL; mysqlimport似乎一次只需要一个表.
我的键盘在Visual Studio中偶尔会出现错误的行为.例如,Shift + 3插入一个井号而不是一个井号#.Shift + \插入代字号〜而不是管道.当发生这种情况时,它只影响VS的当前实例 - 即使我打开了多个VS窗口.只有VS受到影响 - 记事本和其他Windows应用程序都很好.关闭然后重新打开我在新的VS 2008实例中处理的解决方案可以解决问题.
有没有人知道我不小心压制了什么组合键?以及如何还原它?
我必须从PowerShell脚本中停止浏览器,我将它通过管道输入
Stop-Process -Force
Run Code Online (Sandbox Code Playgroud)
但是,这是非常突然的.重新启动浏览器时,它会检测到它没有干净地关闭,并尝试重新启动上一个会话.有什么方法可以告诉它优雅地关闭自己?("我们有两种方法可以做到这一点......")
我需要在我生成的每个Python源文件的顶部包含一个版权声明:
# Copyright: © 2008 etc.
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这样的文件时,我收到以下消息:
SyntaxError:第3行文件MyFile.py中的非ASCII字符'\ xa9',但未声明编码; 有关详细信息,请参阅http://www.python.org/peps/pep-0263.html.
显然,Python对版权符号不满意,因为它假设源文件全部是ASCII.要么我需要让我的第一行:
# -*- coding: iso-8859-1 -*-
Run Code Online (Sandbox Code Playgroud)
告诉Python我正在使用拉丁语编码,或者我可以将版权声明更改为:
# Copyright: \xa9 2008 etc.
Run Code Online (Sandbox Code Playgroud)
它可能没有相同的法律地位.
有更优雅的解决方案吗?
我有一个函数,它将另一个函数作为参数.如果函数是类的成员,我需要找到该类的名称.例如
def analyser(testFunc):
print testFunc.__name__, 'belongs to the class, ...
Run Code Online (Sandbox Code Playgroud)
我想
testFunc.__class__
Run Code Online (Sandbox Code Playgroud)
会解决我的问题,但这只是告诉我testFunc是一个函数.
python ×7
list ×2
reflection ×2
encoding ×1
key-bindings ×1
keyboard ×1
mutable ×1
mysql ×1
mysqldump ×1
mysqlimport ×1
nested-lists ×1
powershell ×1
py2exe ×1
shallow-copy ×1
wxpython ×1