扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
提示错误时因为你通过map的话list取的话是一个P1对象,是一个列表,传到P ointsTuple2的话是一整个列表,但是你定义的函数需要5个参数,才会报那样的错,改的方法有两个,下面这个改参数为tuple,在把参数赋值,或者加个中介,希望有帮助
成都地区优秀IDC服务器托管提供商(成都创新互联).为客户提供专业的达州服务器托管,四川各地服务器托管,达州服务器托管、多线服务器托管.托管咨询专线:18982081108
修改成一个参数:
# -*- coding: utf-8 -*-
def PointsTuple2(tuple1):
R,L,ALPHA,M,ANGLE=tuple1
lst=[]
pitch=2.0*np.pi*R/np.tan(np.radians(ALPHA))
pitch1=2.0*np.pi*11.5/np.tan(np.radians(7.16))
newM=int(np.ceil(M*L/pitch))
DtaPitch=0
if pitch pitch1 :
DtaPitch= pitch-pitch1
else:
DtaPitch=0
for i in range(newM):
ii=float(i)
x=R*np.cos(2.0*np.pi*ii/M+np.radians(ANGLE))
y=R*np.sin(2.0*np.pi*ii/M+np.radians(ANGLE))
z=ii*(pitch-DtaPitch)/M
pointCoordinates=(x,y,z)
lst.append(pointCoordinates)
Points=tuple(lst)
print 'PointsNum:',len(Points),'DtaPitch:',DtaPitch,'newM:',newM,'R=%f,pitch=%f'%(R,pitch)
return Points
#
import numpy as np
from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool(4)
#
global newM,L1,L2,L3,ALPHA1,M1
L1,L2,L3,ALPHA1,M1,newM=912.0,938.0,991.0,7.16,102.0,0.0
dAngle=12.629916088
ddAngle=(36.0-dAngle)/8.0 #意欲将阴线分为8个网格
tuple1=(11.5,L1,ALPHA1,M1,11.685041956)
Points1=PointsTuple2(tuple1)
tuple2=(11.5,L1,ALPHA1,M1,11.685041956)
Points2=PointsTuple2(tuple2)
#对比多线程
P1=(11.5,912.0,7.16,102.0,11.685041956)
P2=(11.5,L1,ALPHA1,M1,23.954074918)
P3=(11.85,L2,ALPHA1,M1,11.685041956)
P4=(11.85,L2,ALPHA1,M1,23.954074918)
list1=[P1,P2,P3,P4]
results9=pool.map(PointsTuple2,list1)
pool.close()
pool.join()
另外这个运行可能有点问题(google的样本,可以借鉴一下他的写法):
from multiprocessing import Pool
import numpy as np
pool = Pool(processes=2) # I like to calculate only 2 FFTs parallel
# in every time step, therefor 2 processes
def Splitter(args):
'''I have to pass 2 arguments'''
return makeSomething(*args)
def makeSomething(a,b):
'''dummy function instead of the one with the FFT'''
return a*b
def RungeK():
# ...
# a lot of code which create the vectors A and B and calculates
# one Kunge-Kutta step for them
# ...
pool = Pool(processes=2)
n = 20 # Just something for the example
A = np.arange(50000)
B = np.ones_like(A)
for i in xrange(n): # loop over the time steps
A *= np.mean(B)*B - A
B *= np.sqrt(A)
results = pool.map(Splitter, [(A, 3), (B, 2)])
A = results[0]
B = results[1]
pool.close()
print np.mean(A) # Some output
print np.max(B)
if __name__== '__main__':
RungeK()
如果是同一包里面,直接就可以使用,如果不是同一个包,那么需要先import后,通过“包名.类名”才能使用。 下面是同一个包里面的案例: def a(): print(1) def b(): a() print (2) b()
下面是一个例子,用 for 循环调用 10 次 test 函数,并把返回值加到 sum 变量中:
#coding=utf-8
def test(n):
return n + 1
sum = 0
# 使用 for 循环调用 10 次 test 函数
for i in range(10):
# 调用 test 函数,并将返回值加到 sum 中
sum = sum + test(i)
print('sum = ' + str(sum))
这个判断题的答案是对的。
在Python中,函数是可以被重复调用的。函数是一种封装的代码块,可以被多次使用。你可以在你的代码中多次调用同一个函数,只需要在代码中写出函数的名字并提供必要的参数即可。
例如,假设你有一个函数"greet()",它打印一个问候语,你可以这样调用它:
def greet(name):
print("Hello, " + name + "!")
greet("Alice") # Output: "Hello, Alice!"
greet("Bob") # Output: "Hello, Bob!"
总的来说,函数是Python中一个很有用的工具,它可以帮助你封装代码,并使你的代码更加可重复使用。
#脚本里面直接这样写就好了
import random
def R():
print (random.randint(1,1000))
for i in range(1,10):
R()
你好:
我对代码做了注释:
#last是一个列表,里面只有一个元素,就是1,说明已经运行一次
def counter(last=[1]):
#last[0]将列表里面的第一个元素取出,然后加1,赋值给next
next = last[0] + 1
#修改列表里面第一个元素的值
last[0] = next
#返回此时运行的次数
return next
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流