1楼:匿名用户
>>>defa():
globalq
q=1+2
returnq
>>>defb():
a()c=2+q
print(c)
>>>b()
5>>>q
3函数中的变量在外面调用,需要申明为全局变量
python 一个函数怎么使用另一个函数内的变量
2楼:一猪之哀伤一
例如一个函数内有一个变量i,怎么在函数外或另一个函数中调用或更改它。新手学习,谢谢。
******************************
不能在函数外更改某函数里的局部变量,因为每当你实例化那个函数的时候,那个函数里面的局部变量也会被重新赋值,重新定义,谈何更改呢?
这一个全部变量和局部变量的问题,如果要实现楼主说的,必须使用全局变量(类中的self):
***************=bianliang.py**********=
#coding: utf-8
i = 0 #定义一个全局变量i
def a():
'''打印出i的值
'''print i
def b():
global i
a() #调用a方法
print i #打印i
i = 1000 #重新赋值i
print i #打印i
a() #再次调用a方法
b()******************************===
%python bianliang.py00
1000
1000
这个py文件里面使用了一个全局变量i,实现了a方法和b方法共用参数i
3楼:细雨摇琴
用闭包再来看看专业的解释:闭包(closure)是词法闭包(lexical closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。
defmake_adder(addend):
defadder(augend):
returnaugend+addendreturnadder
p=make_adder(23)
q=make_adder(44)printp(100)printq(100)
运行结果:
123144
python 如何在一个函数里通过传参数调用其他函数
4楼:匿名用户
1.method大小写修改到一致。
2.最后那里bb不要加引号。
def aa(method, data):
method(data)
def bb(data):
print data
def cc(data):
print data
aa(bb,'123')
5楼:韧劲
python中函数参数的传递是通过“赋值”来传递的。但这条规则只回答了函数参数传递的“战略问题”,并没有回答“战术问题”,也就说没有回答怎么赋值的问题。函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的。
而后者又是由前者决定的。函数参数的定义有四种形式:
1. f(arg1,arg2,...)
2. f(arg2=,arg3=...)
3. f(*arg1)
4. f(**arg1)
第1 种方式是最“传统”的方式:一个函数可以定义不限个数参数,参数(形式参数)放在跟在函数名后面的小括号中,各个参数之间以逗号隔开。用这种方式定义的函数在调用的时候也必须在函数名后的小括号中提供相等个数的值(实际参数),不能多也不能少,而且顺序还必须相同。
也就是说形参和实参的个数必须一致,而且想给形参1的值必须是实参中的第一位,形参与实参之间是一一对应的关系,即“形参1=实参1 形参2=实参2...”。很明显这是一种非常不灵活的形式。
比如:"def addon(x,y): return x + y",这里定义的函数addon,可以用addon(1,2)的形式调用,意味着形参x将取值1,主将取值2。
addon(1,2,3)和addon (1)都是错误的形式。
第2种方式比第1种方式,在定义的时候已经给各个形参定义了默认值。因此,在调用这种函数时,如果没有给对应的形式参数传递实参,那么这个形参就将使用默认值。比如:
“def addon(x=3,y=5): return x + y”,那么addon(6,5)的调用形式表示形参x取值6,y取值5。此外,addon(7)这个形式也是可以的,表示形参x取值7,y取默认值5。
这时候会出现一个问题,如果想让x取默认值,用实参给y赋值怎么办?前面两种调用形式明显就不行了,这时就要用到python中函数调用方法的另一大绝招 ──关健字赋值法。可以用addon(y=6),这时表示x取默认值3,而y取值6。
这种方式通过指定形式参数可以实现可以对形式参数进行“精确攻击”,一个副带的功能是可以不必遵守形式参数的前后顺序,比如:addon(y=4,x=6),这也是可以的。这种通过形式参数进行定点赋值的方式对于用第1种方式定义的函数也是适用的。
上面两种方式定义的形式参数的个数都是固定的,比如定义函数的时候如果定义了5个形参,那么在调用的时候最多也只能给它传递5个实参。但是在实际编程中并不能总是确定一个函数会有多少个参数。第3种方式就是用来应对这种情况的。
它以一个*加上形参名的方式表示,这个函数实际参数是不一定的,可以是零个,也可以是n个。不管是多少个,在函数内部都被存放在以形参名为标识符的tuple中。比如:
对这个函数的调用addon() addon(2) addon(3,4,5,6)等等都是可以的。
与第3种方式类似,形参名前面加了两个*表示,参数在函数内部将被存放在以形式名为标识符的dictionary中。这时候调用函数必须采用key1=value1、key2=value2...的形式。
比如:1. def addon(**arg):
2. sum = 0
3. if len(arg) == 0: return 0
4. else:
5. for x in arg.itervalues():
6. sum += x
7. return sum
那么对这个函数的调用可以用addon()或诸如addon(x=4,y=5,k=6)等的方式调用。
上面说了四种函数形式定义的方式以及他们的调用方式,是分开说的,其实这四种方式可以组合在一起形成复杂多样的形参定义形式。在定义或调用这种函数时,要遵循以下规则:
1. arg=必须在arg后
2. *arg必须在arg=后
3. **arg必须在*arg后
在函数调用过程中,形参赋值的过程是这样的:
首先按顺序把“arg”这种形式的实参给对应的形参
第二,把“arg=”这种形式的实参赋值给形式
第三,把多出来的“arg”这种形式的实参组成一个tuple给带一个星号的形参
第四,把多出来的“key=value”这种形式的实参转为一个dictionary给带两个星号的形参。
例子:1. def test(x,y=5,*a,**b):
2. print x,y,a,b
就这么一个简单函数,来看看下面对这个函数调用会产生什么结果:
test(1) ===> 1 5 () {}
test(1,2) ===> 1 2 () {}
test(1,2,3) ===> 1 2 (3,) {}
test(1,2,3,4) ===> 1 2 (3,4)
test(x=1) ===> 1 5 () {}
test(x=1,y=1) ===> 1 1 () {}
test(x=1,y=1,a=1) ===> 1 1 ()
test(x=1,y=1,a=1,b=1) ===> 1 1 ()
test(1,y=1) ===> 1 1 () {}
test(1,2,y=1) ===> 出错,说y给赋了多个值
test(1,2,3,4,a=1) ===> 1 2 (3,4)
test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4)
python中怎么在一个函数内调用另外一个函数,类
6楼:流氓大皇
1,如果调用在另外一个.py里面的函数,先导入**.py,然后调用2,如果在本py里面,则把要调用的函数放在前面,直接调用,例如:
defsum(a,b):
returna+b
c=sum(5,6)
7楼:匿名用户
如果是同一包里面,直接就可以使用,如果不是同一个包,那么需要先import后,通过“包名.类名”才能使用。
下面是同一个包里面的案例:
def a():
print(1)
def b():
a()print (2)b()
8楼:踏雪三郎
今天遇到同样的问题,就来答一波吧
1,如果是在类中,那么就很简单了,类中的一个函数调用另一个函数,只要在那个被调用的函数前加self即可(图如下,详细可以参考笔者博客),
2,如果不是在类中,(这是笔者遇到的问题),有一个简单的方法,如下sin_f函数调用sin函数(注:a=sin()不能写到sin_f()函数下,会说a没声明就调用):
3,如果是已经存在的包,那么调用包更简单了,(同样可以参考笔者上面给的那个博客第四部分)
4,最后,更多关于python问题可以参考笔者的python教程笔记
python中是如何实现将一个函数中定义的变量在另一个函数中改变其值的
9楼:wxc一块钱
python用列表名给变量赋值时给的是地址,就像c里指针一样。想要实现传值用copy包
python中怎么调用自定义函数
10楼:育知同创教育
网上的很多资料都是说“如果把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动python解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)”。
但是在尝试这种方法后,发现仍然还是无法调用自定义的函数。
python的引外机制:
import abc
1、首先在当前目录下找有没有abc、abc.py2、找python的安装目录:f:
\python2.7exe\lib\site-packages;f:\python2.
7exe\lib;
3、找电脑中path下面的目录
于是我改变路径,将保存的abc.py文件直接放在python的安装目录下,使用import abc命令,然后在python交互界面用 abc.***(***是abc.
py文件中的定义函数的函数名),解决了调用自定义函数问题。
python中怎么在函数内调用另外函数,类
1楼 秀才周晔 方案如下 将另一个py做成一个包,或者直接和调用文件放在同一个目录下 在调用者文件头引入 from py名字 import 这样就可以使用另一个py文件的所有函数了。 分享本回 python中怎么在一个函数内调用另外一个函数,类 2楼 双庚的奶酪 def a x y x x retu...
python在类中函数调用可以在函数定义之前吗
1楼 匿名用户 两种位置都试一下呗,编程需要有探索的劲儿,不然文档手册都看不下去的话,很难提高 python可以在函数定义之前调用吗 2楼 想你若隱若現 不能,python是解释性的,必须先定义后调用只能这样12 3def test return test python 函数定义必须在调用前面吗 3...
python函数变量参数怎么使用
1楼 育知同创教育 刚学用python的时候,特别是看一些库的源码时,经常会看到func args kwargs 这样的函数定义,这个 和 让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。 先说说函数定义,我们都知道,下面的 定义了一个函数funca def funca pass 显然,...