python调用函数返回值方法的返回值怎么被其他函数调用

python(166)
python允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义,这就是我们通常所说的嵌套定义。
为什么?因为函数是用def语句定义的,凡是其他语句可以出现的地方,def语句同样可以出现。
像这样定义在其他函数内的函数叫做内部函数,内部函数所在的函数叫做外部函数。当然,我们可以多层嵌套,
这样的话,除了最外层和最内层的函数之外,其它函数既是外部函数又是内部函数。
def foo():
#定义函数foo
#在foo函数内定义变量m=3
def bar():
#在foo函数内定义函数bar
#在bar函数内定义局部变量n=4
#在foo函数内调用bar函数
#调用foo函数结果:
#定义全局变量spam
def tester():
def nested():
global spam
print 'spam=',spam
#打印全局变量的值
#修改全局变量的值
return nested
#tester函数的返回值是nested函数
t=tester()
#调用函数tester,将得到的返回值赋给t
print type(t) #返回值t的类型是function
#打印返回值的信息
tester()()
#调用函数tester,得到的返回值是nested函数对象,最后调用函数nested
print 'spam=',spam
#打印修改后的全局变量的值
&type 'function'&
&function nested at 0x02937CF0&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:108925次
积分:3205
积分:3205
排名:第9224名
原创:183篇
转载:76篇
(1)(1)(14)(15)(15)(27)(18)(48)(51)(14)(39)(17)匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。Python Web 2 —— 类和函数的声明和调用
& & & & 我们知道python其实也是面向对象的语言,既然提到了面向对象编程(OOP),那我们理所应当地会想到类和函数的概念,那么我们接下来就看看在python中类和函数是如何声明和调用的。
一、python中的类:
1.类的定义:
class Test(father_class):
& & & & 如上述代码,在python中声明一个类通过class关键词,class后面的Test就是此类的类名,类名之后的(father_class)用来说明当前类继承了哪个父类,假如没有父类,则继承自(object)类。
2.类的实例化,对象的创建:
t = Test()
3.类的__init__方法:
& & & & 由于类起到模板的作用,所以,可以在创建实例的时候,把一些必要的属性强制填写进去,与我们在java的类的构造函数中所作的操作相似。这时候我们需要通过定义一个特殊的__init__方法,例如在创建的时候把name属性绑上去:
class Test(object):
def __init__(self,name):
self.name = name
& & & & 注意:__init__的第一个参数永远是self,表示的是实例本身,所以在此方法中把属性绑定到self上即可。但是,假如__init__方法之后,创建实例时,就不能像上述中那样传入空的参数了,必须根据__init__方法的参数格式匹配参数,但是self是不需要传入的,Python解释器自己会把实例变量传进去:
&&&t = Test('linsh')
&&&print(t.name)
4.类的类方法:
class person(object):
def setName(self,name):
self.name = name
def getName(self):
return self.name
& & & & 如上述代码所示,类方法的第一个参数也必须是self,其他和普通方法一样,调用的时候,只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入:
p = person()
p.setName('lin')
= p.getName()
print(name)
5.类的私有变量:
& & & & 在java中,我们可以通过public、private或者protect等关键字来修饰方法和变量,其作用就是设置方法和变量的访问权限。在python中也要类似的做法,例如我们希望把name属性设置为私有的,即外部不能直接通过实例对象访问此属性,而应通过开放的接口来获取该属性,例如:
class person(object):
def setName(self,name):
self.__name = name
def getName(self):
return self.__name& & & & 如上述所示,在属性name前面加上双下划线“__”即可将属性设置为私有,那么外部就不能直接通过 实例对象.name来访问该属性了,而应通过该类的类方法getName()来访问此属性,否则会报错。
二、python中的函数:
& & & & 在python中,我们通过def关键词来声明一个方法,例如:
def hello():
print('Hello!')
def hello(name):
print('Hello,',name)
def getStr(firstName,lastName): #有返回
return lastName+firstName
& & & & 上面的函数与其他高级语言基本相似,除此之外,python定义的函数还可以同时返回多个数据:
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
& & & & 调用此函数的时候,按顺序接收函数返回数据:
&&& x, y = move(100, 100, 60, math.pi / 6)
&&& print(x, y)
151.32 70.0
& & & &&原来返回值是一个tuple!但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
三、函数类型:
函数的类型除了根据是否有返回值来划分之外,还可以根据带参情况来进行划分,划分为:必选参数、默认参数、可变参数、关键字参数和命名关键字参数。
1.必选参数:
必选参数函数就是调用函数时传入函数中的实参数量和顺序必须与函数声明时完全一致,否则会报错:
def power(x, n):
while n & 0:
& & & & 调用如下,参数不一致时出现了报错,因为有参数缺失:
&&& power(5, 2)
&&& power(5)
Traceback (most recent call last):
File &&stdin&&, line 1, in &module&
TypeError: power() missing 1 required positional argument: 'n'
2.默认参数:
def power(x, n=2):
while n & 0:
& & & & 如上述代码所示,在声明power函数时,对第二个参数n设置了默认值,则在调用此函数时,可以有两种方式:一是传入两个参数的power(5,2);另一个是只传入一个参数power(5),此时第二个参数n会使用默认值,所以不会报错:
&&& power(5)
&&& power(5, 2)
3.可变参数:
顾名思义,可变参数的意思就是定义的函数传入参数可以是0个、1个...甚至无数个。对于需要传入多个参数,且参数数量不确定的函数,我们会想到将输入参数声明为一个list或者tuple,例如:
def calc(numbers):
for n in numbers:
sum = sum + n * n
return sum
& & & & 调用时,传入一个list或者tuple:
&&& calc([1, 2, 3])
&&& calc((1, 3, 5, 7))
& & & & 但是,可变参数函数的调用,应该简化为一下形式:
&&& calc(1, 2, 3)
&&& calc(1, 3, 5, 7)
& & & & 那么,如何将list或者tuple函数改写成可变参数函数呢,其实很简单,只需在输入参数前面加上一个“*”号即可:
def calc(*numbers):
for n in numbers:
sum = sum + n * n
return sum
& & & & 如果已有一个list或者tuple,要将其传入可变参数函数中,有两种方式,显然第二种更为方便,Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:
&&& nums = [1, 2, 3]
&&& calc(nums[0], nums[1], nums[2])
&&& calc(*nums)
4.关键字参数:
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict:
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
& & & & 上述函数声明中,name和age都是必须参数,而kw就是关键字参数,调用时必须参数必须有实参输入,而关键字参数可以无输入:
&&& person('Michael', 30)
name: Michael age: 30 other: {}
& & & & 添加任意关键字参数的形式,相当于一种key-value的形式,因为关键字参数最后会被保存成一个dict字典:
&&& person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
&&& person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
& & & & 类似可变参传入list和tuple作为输入的形式,我们也可以将一个已有的dict作为输入参数传入关键字参数函数中:
&&& extra = {'city': 'Beijing', 'job': 'Engineer'}
&&& person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
<span style="color:#.命名关键字参数:
假如只想接收关键字参数中的部分数据,我们可以通过条件语句进行筛选,如下只接收city和job关键字的数据:
def person(name, age, **kw):
if &#39;city&#39; in kw:
# 有city参数
if &#39;job&#39; in kw:
# 有job参数
print(&#39;name:&#39;, name, &#39;age:&#39;, age, &#39;other:&#39;, kw)
& & & & 但是,调用函数时仍然可以传入不受限制的关键字参数:
&&& person(&#39;Jack&#39;, 24, city=&#39;Beijing&#39;, addr=&#39;Chaoyang&#39;, zipcode=123456)
& & & & 为了限制关键字参数,我们可以使用命名关键字参数,改写person函数如下:
def person(name, age, *, city, job):
print(name, age, city, job)
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。调用的方式如下:
&&& person(&#39;Jack&#39;, 24, city=&#39;Beijing&#39;, job=&#39;Engineer&#39;)
Jack 24 Beijing Engineer
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:
def person(name, age, *args, city, job):
print(name, age, args, city, job)
& & & & 命名关键字参数调用时,必须传入参数名,否则会报错:
&&& person(&#39;Jack&#39;, 24, &#39;Beijing&#39;, &#39;Engineer&#39;)
Traceback (most recent call last):
File &&stdin&&, line 1, in &module&
TypeError: person() takes 2 positional arguments but 4 were given
命名关键字参数可以有缺省&#20540;,从而简化调用:
def person(name, age, *, city=&#39;Beijing&#39;, job):
print(name, age, city, job)
& & & & 上面函数调用时,由于city参数已有默认&#20540;,所以可以不传入该参数:
&&& person(&#39;Jack&#39;, 24, job=&#39;Engineer&#39;)
Jack 24 Beijing Engineer
6.参数组合:
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
def f1(a, b, c=0, *args, **kw):
print(&#39;a =&#39;, a, &#39;b =&#39;, b, &#39;c =&#39;, c, &#39;args =&#39;, args, &#39;kw =&#39;, kw)
def f2(a, b, c=0, *, d, **kw):
print(&#39;a =&#39;, a, &#39;b =&#39;, b, &#39;c =&#39;, c, &#39;d =&#39;, d, &#39;kw =&#39;, kw)
& & & & 调用方式如下,解释器自动按参数名和参数位置将各种参数传入到对应参数中:
&&& f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
&&& f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
&&& f1(1, 2, 3, &#39;a&#39;, &#39;b&#39;)
a = 1 b = 2 c = 3 args = (&#39;a&#39;, &#39;b&#39;) kw = {}
&&& f1(1, 2, 3, &#39;a&#39;, &#39;b&#39;, x=99)
a = 1 b = 2 c = 3 args = (&#39;a&#39;, &#39;b&#39;) kw = {&#39;x&#39;: 99}
&&& f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {&#39;ext&#39;: None}
四、包含类函数的类声明:
class person(object):
def setName(self,name):
self.name = name
def getName(self):
return self.name
调用方式:
p = person()
p.setName(&#39;lin&#39;)
= p.getName()
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
python中函数的返回值怎么调用那
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
稍有积蓄, 积分 237, 距离下一级还需 263 积分
论坛徽章:2
def num1(n):
& & return n*2
def num2(n):
& & q = num1(n)
& & return q*n复制代码是否说的这个?
巨富豪门, 积分 25061, 距离下一级还需 14939 积分
论坛徽章:69
& & 举个栗子& &
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
print 和 return的区别,以及一个函数的返回值怎么传给其他函数使用
富足长乐, 积分 6889, 距离下一级还需 1111 积分
论坛徽章:4
def double(n)
& & return n*2
print(double(12)) #24复制代码同学,你应该先看完教程
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
看了没明白,问下return的值是不是可以直接被python的其他函数引用
稍有积蓄, 积分 237, 距离下一级还需 263 积分
论坛徽章:2
可以,直接用或者赋值再调用
白手起家, 积分 144, 距离下一级还需 56 积分
论坛徽章:0
嗯,谢谢哥们,我也在弄那,我的qq:
白手起家, 积分 18, 距离下一级还需 182 积分
论坛徽章:0
& & print 就是到标准输出吧。}

我要回帖

更多关于 python调用函数返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信