python中将函数赋值给变量时需要注意的一些问题

变量赋值是我们在日常开发中经常会遇到的一个问题,本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

见过两种函数赋值给变量的形式,一种是

a=f



另一种是    

a=f()



这两种形式是有区别的,分别总结一下。



1.a=f型属于将变量指向函数。



用代码验证一下:  
 

>>> f = abs

>>> f(-10)

10



说明变量f现在已经指向了abs函数本身。直接调用abs()函数和调用变量f()完全相同。这是廖雪峰老师python教程上的例子,现在调用f()和调用abs()是一样的了。

再举一个工厂函数的例子:  
 

def maker(N):

 

  def action(X):

 

    return X**N

 

  return action



这个嵌套函数的外层返回值为内层函数的函数名,注意没有括号,这里有无括号是有很大区别的。此时调用外部函数:  
 

f=maker(2)



那么如上所述,f便指向了action函数,且限制条件为N=2,可以理解为f为N等于2时的action函数。我们来调用它:  
 

>>> f(3)

9



证明f和action函数是一样的。



2.a=f()型属于将f()的返回值赋值给a的过程



这里的a仅仅接收f()的返回值,如果f()没有返回值,那么a即被赋值为None。这里值得注意的一点是,在a=f()的执行过程中,f()会运行一次,这也是我刚刚搞明白的,如:  
 

>>> def
add(x,y):

    z=x y

    print(z)

>>>a=add(3,4)

7



这里虽然只有一个赋值语句执行了,但是却输出了结果7,说明赋值过程函数add执行了,然而a的值为None,且只能通过print语句才可以显示。不只是赋值过程函数会执行,写在return语句中也会如此。  
 

>>>def
log(func):

   def wrapper(*args, **kw):

     print('call %s():' % func.__name__)

     return func(*args, **kw)

   return wrapper

>>>@log

>>>def now():

    print('2015-3-25')



这是廖雪峰老师python教程装饰器一节的例程,刚开始我以为return
func(*args,**kw)这个语句是返回了now()函数(即func函数)的返回值,后来发现now函数没有返回值,即为None,所以其实是这个语句在赋值过程,

func(*args,**kw)执行了,即函数now的print语句执行了。



下面的习题中,一个变形是要求在函数调用的前后打印出'begin call'和'end
call',下面一位网友的程序是这么写的:  
 

def wrapper(*args,**kw):

   print(t 'begin call')

   result=func(*args,**kw)

   print(t 'end call')

   return result



开始不太理解为什么使用result=func(*args,**kw)这句,后来理解后才明白其实赋值本身并没有意义,只是这句话同时使得func函数运行了,所以写成  
 

def wrapper(*args,**kw):

   print(t 'begin call')

   func(*args,**kw)

   print(t 'end call')

结果也是一样的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助

python中将函数赋值给变量时需要注意的一些问题的更多相关文章

  1. 【python】函数名存在变量中

    变量函数:意思就是将函数名存在变量中,然后根据变量值动态的调用需要的函数. LOGIN = 'xxxx' PASSWD = "xxx" URL = 'xxxxx' def hand ...

  2. Python中将字典转为成员变量

    技术背景 当我们在Python中写一个class时,如果有一部分的成员变量需要用一个字典来命名和赋值,此时应该如何操作呢?这个场景最常见于从一个文件(比如json.npz之类的文件)中读取字典变量到内 ...

  3. Python中将函数作为另一个函数的参数传入并调用

    在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用 在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除, ...

  4. Python函数:对变量赋值,变量即局部

    b = 6 def f2(a): print(a) print(b) b = 9 UnboundLocalError: local variable 'b' referenced before ass ...

  5. Python 一等函数

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 在 Python 中,函数是一等对象.编程语言理论家把"一等 ...

  6. Python:函数解释(面向过程)

    1. 函数概述 在编程的语境下,函数 (function) 是指一个有命名的.执行某个计算的语句序列 (sequence of statements) .函数可以针对某类问题建立了通用解决步骤(算法) ...

  7. python学习 函数

    # -*- config=utf-8 -*- #################################### 函数 ################################## de ...

  8. Python返回函数、闭包,匿名函数

    函数不仅可以作为函数参数,还可以作为函数返回结果 def pro1(c,f): def pro2(): return f(c) return pro2 #调用pro1函数时,返回的是pro2函数对象& ...

  9. python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值

    Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...

随机推荐

  1. BFS (1)算法模板 看是否需要分层 (2)拓扑排序——检测编译时的循环依赖 制定有依赖关系的任务的执行顺序 djkstra无非是将bfs模板中的deque修改为heapq

    BFS模板,记住这5个: (1)针对树的BFS 1.1 无需分层遍历 from collections import deque def levelOrderTree(root): if not ro ...

  2. httprunner学习19-重复执行用例

    前言 使用httprunner做接口测试过程中,在工作中会遇到这种场景,发现某个接口不稳定,想重复运行100次用例,甚至1000次,看成功率. yml脚本 - config: name: httpbi ...

  3. JSP学习之路

    1.JSP默认Encoding编码格式设置:UTF-8

  4. solr中特殊字符的处理

    如查询的条件为:params.add("fq", "jiucaiyun_brand:Double A" ),这样是查不出带有空格的条件,需要把空格转义 if(b ...

  5. 几种开放源码的TCP/IP协议栈比较

    http://blog.chinaunix.net/uid-28785506-id-3828286.html 原文地址:几种开放源码的TCP/IP协议栈比较 作者:三点水兽 1.BSD TCP/IP协 ...

  6. python 日期、时间、字符串相互转换(转载)

    原文链接:https://www.cnblogs.com/huhu-xiaomaomi/p/10338472.html 在python中,日期类型date和日期时间类型dateTime是不能比较的. ...

  7. form设计批量赋值

    data: { list:[], cards: { cardname: "", cardtitle: "", cardtel: "", ca ...

  8. 3.深入学习Servlet的Response和Request

    一.HttpServletResponse web服务器接受到客户端的HTTP请求,对于这个请求分别创建一个代表请求的对象HttpServletRequest和一个代表响应的对象HttpServlet ...

  9. 超实用文件监控多线程FTP上传工具

    这是自己很久以前写的一个多线程FTP 上传工具,支持多账户,自定义线程数,自定义文件监控目录,可用做文件发布使用,非常实用,今天有小伙伴问起,现分享出来: using System; using Sy ...

  10. 应用Synopsys Synplify 综合的注意一个问题

    在Xilinx ISE中使用Synopsys Synplify综合时,注意约束文件*.ucf需在当前工程的文件夹下.不要将其它文件夹下的同名文件的约束当成当前工程下文件的约束.