
正文
包含python函数隐式调用的词条
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
编程猫中的函数返回什么意思
返回值就是函数返回的结果。
例如:
//定义函数返回值类型
int Add()
{
int a=1,int b=2,c;
c=a+b;
return c;
}
c就是这个方法返回的结果。这样你就可以直接将这个方法赋给一个变量:
int d=add();
其他类型也一样。
数学上的函数是一大串表达式,最后会有因变量。而编程函数,是为处理数据而存在的。比如说编写了一个求和函数,那么在另一个函数中,就没必要重新写一次了。
而完成这一点的,就是返回值,我们可以直接把结果返回到新的程序中,也就是数学函数中的因变量。当然,有很多类函数,有一些系统函数会返回BOOL值,来确认函数是否成功运行。有的会返回一个指针,来实现对应设备的操作。
扩展资料:
0x 02 return 语句位置与多条 return 语句:
python 函数使用 return 语句返回 "返回值",可以将其赋给其它变量作其它的用处,所有函数都有返回值,如果没有 return 语句,会隐式地调用 return None 作为返回值。
一个函数可以存在多条 return 语句,但只有一条可以被执行,如果没有一条 reutrn 语句被执行,同样会隐式调用 return None 作为返回值。
如果有必要,可以显式调用 return None 明确返回一个None(空值对象)作为返回值,可以简写为 return,不过 python 中懒惰即美德,所以一般能不写就不写。
如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了。
0x 01 指定返回值与隐含返回值:
函数体中 return 语句有指定返回值时返回的就是其值,函数体中没有 return 语句时,函数运行结束会隐含返回一个 None 作为返回值,类型是 NoneType,与 return 、return None 等效,都是返回 None。
参考资料来源:百度百科-返回值
相关问答
Q1: python函数的返回值?
题主你好,
关键点在于函数如果没有明确使用return关键字指定函数的返回值,则默认返回值是none.
-----
所以temp = hello()这句的理解就是: 执行hello()这个函数, 并且把函数的返回值赋给变量temp, 但hello()函数中没有return语句, 所以hello()函数的返回值为默认的none.
-----
题主还可以在hello()函数最后加一个: return 123
然后再行一下看看,就明白了.
=====
希望可以帮到题主, 欢迎追问.
Q2: Python中的返回值问题!!!
首先,代码有误,python函数隐式调用你想调用python函数隐式调用的应该是
sorted([4,3,2,1])
reversed([4,3,2,1])
然后,python函数隐式调用你所说的reversed的返回值类型也不正确。
sorted返回的是list,reversed返回的是iterator。
list你应该很熟悉了。iterator和list是完全不同的东西。简单的说iterator只是提供一个接口,每次迭代可以产生一个值,到没有值为止。iterator在很多语言里面都有实现。在python里面主要用在for循环和list comprehension。
iterator和list/tuple/dict/set等容器的关系:
1.python内置的容器类几乎都实现了iterator接口。
显式获取某个容器的iterator可以调用iter函数:
l = [1,2,3,4]
i = iter(l)
//现在i就是一个list iterator。可以用来遍历l这个list.
i.next() # 1
i.next() # 2
//每一个iterator都必须实现next方法。并且在没有元素时抛出StopIteration异常。
在for语句和list comprehension中,都是隐式调用了这个函数。所以可以直接
for obj in some_container:
pass
2.某些容器可以通过iterator进行初始化,比如list
l = [1,2,3,4]
i = iter(l)
l2 = list(i)
最后,没有列表和列表对象这种说法。这两者一般都是指列表对象(instance of the type list)。如果你是想说列表类(the list type)本身,可以这样得到:
type([])
或者
[].__class__
Q3: python 怎么样隐式函数调用
最常用的是在类定义的方法,给一个property的装饰器,可以安装调用属性的方式调用
Q4: Python 数据模型
Python 风格的关键完全体现在 Python 的数据模型上,数据模型所描述的 API ,为使用最地道的语言特性来构建开发者自己的对象提供了工具。
当 Python 解析器遇到特殊句法时,会使用特殊方法去激活一些基本的对象操作。特殊方法以双下划线开头,以双下划线结尾。如: obj[key] 的背后就是 __getitem__ 方法。魔术方法是特殊方法的昵称,特殊方法也叫双下方法。
使用 __getitem__ 和 __len__ 创建一摞有序的纸牌:
上面的例子,使用 collections.namedtuple 构建了一个简单的类来表示一张纸牌, namedtuple 用以构建只有少数属性但没有方法的类。
我们自定义的 FrenchDeck 类可以像任何 python 标准集合类型一样使用 len() 函数,查看一叠牌有多少张:
也可以像列表一样,使用位置索引, d[i] 将调用 __getitem__ 方法:
也可以使用标准库模块提供的 random.choice 方法,从序列中随机选取一个元素。下面,我们如随机取出一张纸牌:
现在我们已经体会到通过 python 特殊方法,来使用 Python 数据模型的 2 个好处:
因为 __getitem__ 方法把 [] 操作交给了 self.cards 列表,所以我们的 FrenchDeck 实例自动支持切片:
仅仅实现了 __getitem__ 方法,这一摞牌即变得可迭代:
运行结果:
也可以直接调用内置的 reversed 函数,反向迭代 FrenchDeck 实例:
运行结果:
迭代通常是隐式的,比如一个集合类型没有实现 __contains__ 方法,那么 in 运算符就会按顺序做一次迭代搜索。
因此, in 运算符可以用在我们的 FrenchDeck 实例上,因为它是可迭代的:
FrenchDeck 还可以使用 Python 标准库中的 sorted 函数,实现排序:
首先定义一个排序依据的函数:
优先按 rank 的大小排序,rank 相同时则比较 suit 的值:
运行结果:
优先按 suit 的大小排序,suit 相同时则比较 rank 的值:
运行结果:
按照目前的设计,FrenchDeck 还不支持洗牌,因为它是不可变的:
shuffle 函数要调换集合中元素的位置,而 FrenchDeck 只实现了不可变的序列协议,可变的序列还必须提供 __setitem__ 方法:
洗牌:
没有任何的返回值,可见 random.shuffle 就地修改了可变序列 d 。为便于观察结果,我们定义输入的输出函数:
运行结果:
每次洗牌,都是一个随机的序列:
首先明确一点,特殊方法的存在是为了被 Python 解析器调用的,例如:我们不会使用 obj.__len__() 这种写法,而是 len(obj) 。在执行 len(obj) 时,如果 obj 是一个自定义类的对象,那么 Python 会自己去调用我们实现的 __len__ 方法。
对于 Python 内置的数据类型,比如列表、字符串、字节序列等,那么 CPython 会抄个近路, __len__ 实际上会返回 PyVarObject 里的 ob_size 属性,这是因为直接读取属性比调用一个方法要快得多。
很多时候,特殊方法的调用是隐式的,比如 for i in x: 这个语句其实是调用 iter(x) ,而这个函数的背后是 x.__iter__() 方法。
通过内置函数如来使用特殊方法是最好的选择。这些内置函数不仅会调用这些方法,通常还提供额外的好处,对于内置类型来说,它们的速度更快。
下面,我们通过定义一个简单的二维向量类,再来体会一下 Python 特殊方法的美妙:
使用 Vector 类,就像使用 Python 内置的数据类型一样简单:
关于python函数隐式调用和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







