小编Mic*_*hal的帖子

Python range()和zip()对象类型

我理解函数如何在for循环中使用range()zip()可以使用.但是我希望range()输出一个列表 - 就像seq在unix shell中一样.如果我运行以下代码:

a=range(10)
print(a)
Run Code Online (Sandbox Code Playgroud)

输出是range(10),表明它不是列表而是不同类型的对象.zip()打印时有类似的行为,输出类似的东西

<zip object at "hexadecimal number">
Run Code Online (Sandbox Code Playgroud)

所以我的问题是它们是什么,有什么优势使它们成为现实,如何在没有循环的情况下将它们的输出发送到列表?

python iterator list range python-3.x

48
推荐指数
3
解决办法
8万
查看次数

py2app:modulegraph缺少scan_code

由于某些原因我无法解释或google,即使用最简单的例子,py2app也会崩溃.我使用python 3.4.1虚拟环境创建,Projects/Test/virtenv其中py2app通过pip安装.

这是输出$pip list:

altgraph (0.12)
macholib (1.7)
modulegraph (0.12)
pip (1.5.6)
py2app (0.9)
setuptools (3.6)
Run Code Online (Sandbox Code Playgroud)

foo.py是一个保存在Projects/Test /中的hello world示例文件,包含一行:

print('hello world')
Run Code Online (Sandbox Code Playgroud)

setup.py保存在Projects/Test中,生成者$py2applet --make-setup foo.py:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['foo.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)
Run Code Online (Sandbox Code Playgroud)

这是运行的完整输出$python setup.py py2app(所有pip和python命令都是在激活虚拟环境的情况下完成的):

running py2app
creating /Users/mik/Desktop/Projects/Test/build
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone
creating /Users/mik/Desktop/Projects/Test/build/bdist.macosx-10.8-x86_64/python3.4-standalone/app …
Run Code Online (Sandbox Code Playgroud)

python macos py2app python-3.x

12
推荐指数
1
解决办法
2934
查看次数

Sublime Text 3 Python REPL慢速打印

我有几乎相同的问题却与蟒蛇.打印大量文本甚至会破坏我的崇高文本.不幸的是,所描述的解决方案特定于Clojure.有任何想法吗?

澄清:如果代码打印的东西太快而没有延迟,我会遇到速度减慢.这段代码会这样做:

for x in range(1000000):
    print(x)
Run Code Online (Sandbox Code Playgroud)

python sublimerepl sublimetext3

7
推荐指数
0
解决办法
667
查看次数

Python for循环中的Python变量赋值

据我所知,在Python中,常规的c ++样式变量赋值被替换为对东西的引用即

a=[1,2,3]
b=a
a.append(4)
print(b)       #gives [1,2,3,4]
print(a)       #gives [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

但我仍然困惑为什么与基本类型的类似情况,例如.整数的工作方式不同?

a=1
b=a
a+=1
print(b)          # gives 1
print(a)          # gives 2
Run Code Online (Sandbox Code Playgroud)

但等等,当我们考虑循环时,它会变得更加混乱!

li=[1,2,3]
for x in li:
    x+=1
print(li)     #gives [1,2,3]
Run Code Online (Sandbox Code Playgroud)

这是我的预期,但如果我们这样做会发生什么:

a,b,c=1,2,3
li=[a,b,c]
for x in li:
    x+=1
print(li)        #gives [1,2,3]
Run Code Online (Sandbox Code Playgroud)

也许我的问题应该是如何遍历整数列表并在没有map()的情况下更改它们,因为我需要一个if语句.我唯一能做的就是没用

for x in range(len(li)):
    Do stuff to li[x]
Run Code Online (Sandbox Code Playgroud)

将整数打包在一个元素列表中.但必须有更好的方法.

python variables loops

4
推荐指数
2
解决办法
1万
查看次数

Python多处理故障排除

最近我想使用并行处理加速我的一些代码,因为我有一个四核i7,它似乎是浪费.我学习了python(我使用v 3.3.2,如果它匹配)GIL以及如何使用多处理模块克服它,所以我写了这个简单的测试程序:

from multiprocessing import Process, Queue

def sum(a,b):
    su=0
    for i in range(a,b):
        su+=i
    q.put(su)

q= Queue()

p1=Process(target=sum, args=(1,25*10**7))
p2=Process(target=sum, args=(25*10**7,5*10**8))
p3=Process(target=sum, args=(5*10**8,75*10**7))
p4=Process(target=sum, args=(75*10**7,10**9))

p1.run()
p2.run()
p3.run()
p4.run()

r1=q.get()
r2=q.get()
r3=q.get()
r4=q.get()

print(r1+r2+r3+r4)
Run Code Online (Sandbox Code Playgroud)

使用cProfile测量的代码运行大约48秒,但是单个进程代码

def sum(a,b):
    su=0
    for i in range(a,b):
        su+=i
    print(su)

sum(1,10**9)
Run Code Online (Sandbox Code Playgroud)

在大约50秒内运行.我知道这种方法有开销,但我预计改进会更加激烈.fork()的错误不适用于我,因为我在Mac上运行代码.

python macos multiprocessing python-3.x

2
推荐指数
1
解决办法
3361
查看次数