我这样做:
a = 'hello'
Run Code Online (Sandbox Code Playgroud)
现在我只想要一份独立的副本a
:
import copy
b = str(a)
c = a[:]
d = a + ''
e = copy.copy(a)
map( id, [ a,b,c,d,e ] )
Run Code Online (Sandbox Code Playgroud)
出[3]:
[4365576160, 4365576160, 4365576160, 4365576160, 4365576160]
Run Code Online (Sandbox Code Playgroud)
为什么它们都有相同的内存地址,如何获得副本a
?
所以我想了解partial
:
import functools
def f(x,y) :
print x+y
g0 = functools.partial( f, 3 )
g0(1)
4 # Works as expected
Run Code Online (Sandbox Code Playgroud)
在:
g1 = functools.partial( f, y=3 )
g1(1)
4 # Works as expected
Run Code Online (Sandbox Code Playgroud)
在:
g2 = functools.partial( f, x=3 )
g2(1)
TypeError: f() got multiple values for keyword argument 'x'
Run Code Online (Sandbox Code Playgroud)
TypeError
如果我y
用作关键字参数,则消失:
在:
g2( y=1 )
4
Run Code Online (Sandbox Code Playgroud)
是什么导致的TypeError
?
所以我知道(数学)函数的梯度是什么,所以我觉得我应该知道它是什么numpy.gradient
.但我没有.该文件是不是真的有用之一:
返回N维数组的渐变.
数组的梯度是多少?什么时候numpy.gradient
有用?
与函数相反,类的主体在定义时执行:
class A(object):
print 'hello'
Run Code Online (Sandbox Code Playgroud)
日期:
hello
Run Code Online (Sandbox Code Playgroud)
为什么会这样?它与@classmethod
/ @staticmethod
methods和class属性有关吗?
说我同意:
#!/usr/bin/env python
# encoding: utf-8
class A(object):
pass
Run Code Online (Sandbox Code Playgroud)
现在我拆开它:
python -m dis test0.py
4 0 LOAD_CONST 0 ('A')
3 LOAD_NAME 0 (object)
6 BUILD_TUPLE 1
9 LOAD_CONST 1 (<code object A at 0x1004ebb30, file "test0.py", line 4>)
12 MAKE_FUNCTION 0
15 CALL_FUNCTION 0
18 BUILD_CLASS
19 STORE_NAME 1 (A)
22 LOAD_CONST 2 (None)
25 RETURN_VALUE
Run Code Online (Sandbox Code Playgroud)
现在我在类定义中添加一些语句:
#!/usr/bin/env python
# encoding: utf-8
class A(object):
print 'hello'
1+1
pass
Run Code Online (Sandbox Code Playgroud)
然后我又拆开了:
4 0 LOAD_CONST 0 ('A')
3 LOAD_NAME 0 (object)
6 BUILD_TUPLE …
Run Code Online (Sandbox Code Playgroud) s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) )
s
Run Code Online (Sandbox Code Playgroud)
产量
1 3
7 6
2 0
9 7
1 6
Run Code Online (Sandbox Code Playgroud)
order()
按值排序并返回一个新系列
s.order()
Run Code Online (Sandbox Code Playgroud)
产量
2 0
1 3
7 6
1 6
9 7
Run Code Online (Sandbox Code Playgroud)
它看起来sort
也按价值排序,但到位:
s.sort()
s
Run Code Online (Sandbox Code Playgroud)
产量
2 0
1 3
7 6
1 6
9 7
Run Code Online (Sandbox Code Playgroud)
这是两种方法的唯一区别吗?
bind
Redis中的参数是什么?bind
假设我已经知道什么bind
意思(我不知道)的文档.是否bind
设置的IP地址:
Redis
服务器?(我认为这是正确的答案,但后来我不明白为什么我们需要这个)考虑以下功能:
def f(x, dummy=list(range(10000000))):
return x
Run Code Online (Sandbox Code Playgroud)
如果我使用multiprocessing.Pool.imap
,我会得到以下时间:
import time
import os
from multiprocessing import Pool
def f(x, dummy=list(range(10000000))):
return x
start = time.time()
pool = Pool(2)
for x in pool.imap(f, range(10)):
print("parent process, x=%s, elapsed=%s" % (x, int(time.time() - start)))
parent process, x=0, elapsed=0
parent process, x=1, elapsed=0
parent process, x=2, elapsed=0
parent process, x=3, elapsed=0
parent process, x=4, elapsed=0
parent process, x=5, elapsed=0
parent process, x=6, elapsed=0
parent process, x=7, elapsed=0
parent process, x=8, elapsed=0
parent process, …
Run Code Online (Sandbox Code Playgroud) 让我们创建两个列表:
x = range(3)
y = range(3)
print id(x), id(y)
Run Code Online (Sandbox Code Playgroud)
日期:
4366592912 4366591040
Run Code Online (Sandbox Code Playgroud)
我创建了两个独立的列表,输出显示了两个不同的内存地址.这并不奇怪.但现在让我们在没有任务的情况下做同样的事情:
id(range(3))
Run Code Online (Sandbox Code Playgroud)
日期:
4366623376
Run Code Online (Sandbox Code Playgroud)
第二次:
id(range(3))
Run Code Online (Sandbox Code Playgroud)
日期:
4366623376
Run Code Online (Sandbox Code Playgroud)
我不知道如何解释这一点.为什么这两个未命名的列表具有相同的内存地址?
有时我需要使用没有参数的函数的多重处理。我希望我可以做类似的事情:
from multiprocessing import Pool
def f(): # no argument
return 1
# TypeError: f() takes no arguments (1 given)
print Pool(2).map(f, range(10))
Run Code Online (Sandbox Code Playgroud)
我可以做Process(target=f, args=())
,但我更喜欢的语法map
/ imap
/ imap_unordered
。有没有办法做到这一点?
python ×9
python-2.7 ×3
bytecode ×1
class ×1
disassembly ×1
functools ×1
math ×1
numpy ×1
pandas ×1
python-3.x ×1
redis ×1
string ×1