如果你想通过函数的名称来获取函数的运行地址,可以像下面这样实现:
[python] view plain copy
# File: builtin-import-example-2py
def getfunctionbyname(module_name, function_name):
module = __import__(module_name)
return getattr(module, function_name)
print( repr(getfunctionbyname("dbm", "open")) )
在这段代码里,通过open字符串的名称获取数据库管理模块dbm的open函数地址。
运行之后,输出如下:
=== RESTART: D:\work\csdn\python_Game1\example\builtin-import-example-2py ===
<function open at 0x00000226467B2BF8>
>>>
Python 函数定义以及参数传递
1函数定义
#形如def func(args):
doSomething123
以关键字def 开头,后面是函数名和参数下面是函数处理过程。
举例:
def add( a, b ):
return a+b12
参数可以设定默认值,如:
def add( a, b=10 ): #注意:默认值参数只会运算一次
return a+b12
默认值参数只会运算一次是什么意思?
def func( a, b=[] ): #b的默认值指向一个空的列表,每次不带默认值都会指向这块内存
bappend(a) return b
print(func(1))#向默认的空列表里加入元素1 ,默认列表里已经是[1]print(func(2))#向默认的列表里加入元素2,默认列表里已经是[1,2]print(func(3,[]))#向b指向的空列表里加入元素1 ,默认列表里还是[1,2]print(func(4))#向默认的列表里加入元素4,默认列表里已经是[1,2,4]'''
结果:
[1]
[1, 2]
[3]
[1, 2, 4]
'''12345678910111213141516
这下明白为什么默认参数只计算一次了吧,函数参数不传递时默认值总是指向固定的内存空间,就是第一次计算的空间。
2参数传递
def func(a, b):
print('a=%d, b=%d' % (a,b) )12
在使用函数时可以如下方式,结果都是相同的
func(10,20) #不使用参数名,需要按参数顺序传递func(a=10,b=20) #使用参数名可以不按顺序传递func(b=20,a=10)#结果:a=10, b=20a=10, b=20a=10, b=201234567
如果函数定义形式如下方式:
def func(args): #这种定义会把传递的参数包成元组
print(args,type(args))
func(10,20)#结果:#(10, 20) <class 'tuple'>1234567
举一个和上述过程相反的例子:
def func(a,b):
print('a=%d, b=%d' % (a,b) )
a = (10, 20)
func(a) #在调用函数使用``则会把元组解包成单个变量按顺序传入函数#结果:a=10, b=20123456
总结:号在定义函数参数时,传入函数的参数会转换成元组,如果 号在调用时则会把元组解包成单个元素。
另一种定义:
def func(kw):#使用定义参数会把传入参数包装成字典dict
print(kw, type(kw) )
func(a=10,b=20)#这种函数在使用时必须指定参数值,使用key=value这种形式#结果:{'b': 20, 'a': 10} <class 'dict'>12345
相反的例子:
def func(a,b):
print('a=%d, b=%d' % (a,b) )
d = {'a':10, 'b':20 }
func(d) #在调用时使用会把字典解包成变量传入函数。12345
def func(args, kw):#这种形式的定义代表可以接受任意类型的参数
print(args,kw )12
总结:号在定义函数参数时,传入函数的参数会转换成字典,如果 号在调用时则会把字典解包成单个元素。
lambda表达式
lambda表达式就是一种简单的函数
形如 f = lambda 参数1,参数2: 返回的计算值
例如:
add = lambda x,y: x+y
print(add(1,2))'''
结果:3
'''12345
获取π值。math库中的mathpi。
定义一个变量,pi=314,在进行计算过程中,直接使用pi,如果再次修改值,只需要修改pi就可以了。
函数库就是一些事先写好的函数的集合。12函数是模块化的,因此可以被复用。我们写好了一个函数,可以被反复使用。
os是python自带的系统模块,需要import使用
os 源于英文Operating System( *** 作系统)的缩写
cwd 则是源于Current Working Directory,中文意思是 当前工作目录
所以osgetcwd() 指获取当前工作目录
示例:
getcwd()方法语法格式如下:
总之,举例来讲,osgetcwd()、syspath[0] (sysargv[0])和 file 的区别是这样的:
假设目录结构是:
然后我们在C:\test下面执行
这时sub_pathpy里面与各种用法对应的值其实是:
无
path的准确定位对于import包,读写文件都非常重要,
如果一时不能理解,可以在文件执行开头多加几个
print帮助我们确定那个路径是我们希望拿到的,然后将其设为全局变量就好了
对基础运行环境有疑问的,推荐参考: python函数深入浅出 0基础篇
共享变量的方法。
没有办法直接实现你的需求,但是,你可以用共享变量的方法实现,比如:
def worker(procnum, return_dict):
'''worker function'''
print str(procnum) + ' represent!'
return_dict[procnum] = procnumif __name__ == '__main__':
manager = Manager()
return_dict = managerdict()
jobs = [] for i in range(5):
p = multiprocessingProcess(target=worker, args=(i,return_dict))
jobsappend(p)
pstart() for proc in jobs:
procjoin() print return_dictvalues()
以上就是关于python里怎么样通过函数名称来获取函数地址全部的内容,包括:python里怎么样通过函数名称来获取函数地址、python中函数的作用、获取3.14的值可以使用什么python函数库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)