博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python函数调用的四种方式 --基础重点
阅读量:6713 次
发布时间:2019-06-25

本文共 2262 字,大约阅读时间需要 7 分钟。

第一种:参数按顺序从第一个参数往后排#标准调用

# -*- coding: UTF-8 -*-  def normal_invoke(x, y):      print "--normal_invoke:--"      print "x is %d" %x      print "y is %d" %y
#标准调用  normal_invoke(1, 2)

运行结果:

--normal_invoke:--  x is 1  y is 2

 

第二种:#关键字调用  

def keyword_invoke(x, y):      print "--keyword_invoke--:"      print "x is %d" % x      print "y is %d" % y
#关键字调用  keyword_invoke(y=1, x=2) 注意:关键调用从哪开始的,从哪以后都必须使用关键字调用除了‘*’收集参数。不能写成这样的:keyword_invoke(y=1, 2),这样就会报错。

运行结果:

--keyword_invoke--:  x is 2  y is 1

 

第三种:#非关键字可变长参数(tuple) def normal_tuple_invoke(x, y=2, *values):  

print "--normal_tuple_invoke--"      print "x is %d" % x      print "y is %d" % y      for value in values:          print "tuple's value has", value #非关键字可变长参数(tuple)  

 normal_tuple_invoke(1, 3, 'xyz', 123.4) 

注意:收集参数  ‘*’当你参数不确定有多少是你可是使用它,他会把不确定的部分存在values元组中,当然这个元组名字要看‘*’后面跟的是啥了。

运行结果:

--normal_tuple_invoke--  x is 1  y is 3  tuple's value has xyz  tuple's value has 123.4

第四种:#关键字可变长参数(dict) 

def keyword_dict_invoke(x, y=2, **value_dict):      print "--keyword_dict_invoke--"      print "x is %d" % x      print "y is %d" % y      for key in value_dict:          print "key is ", key          print "value is ", value_dict[key] #关键字可变长参数(dict)  

 keyword_dict_invoke(y=1, x=2, arg2='def', arg1='put at the last') 

注意:**value_dict 传回来的参数以字典:key-value的形式存放,单招顺序首先传回来的是:key,其次是:value。

运行结果:

--keyword_dict_invoke--  x is 2  y is 1  key is  arg1  value is  put at the last  key is  arg2  value is  def    Process finished with exit code 0

第五中:还有一种是以整个函数为参数传回来,目前我知道是装饰器在使用

装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足:

  1. 不能修改被装饰的函数的源代码
  2. 不能修改被装饰的函数的调用方式
  3. 满足1、2的情况下给程序增添功能

那么根据需求,同时满足了这三点原则,这才是我们的目的。因为,下面我们从解决这三点原则入手来理解装饰器。

等等,我要在需求之前先说装饰器的原则组成:

< 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 >

这个式子是贯穿装饰器的灵魂所在!

improt timedef test():    time.sleep(2)    print("test is running!")def deco(func):      start = time.time()    func() #2    stop = time.time()    print(stop-start)deco(test) #1

我们来看一下这段代码,在#1处,我们把test当作实参传递给形参func,即func=test。注意,这里传递的是地址,也就是此时func也指向了之前test所定义的那个函数体,可以说在deco()内部,func就是test。在#2处,把函数名后面加上括号,就是对函数的调用(执行它)。因此,这段代码运行结果是:

test is running! the run time is 3.0009405612945557

关于装饰器我在另一篇文章中有详细解释!

 

 

---每天进步一点点!!!

 

转载于:https://www.cnblogs.com/insane-Mr-Li/p/9062802.html

你可能感兴趣的文章
SpringMVC通过Redis实现缓存主页
查看>>
Linux三剑客之awk
查看>>
接口测试
查看>>
ubuntu16 kubernetes1.6安装(七、kubedns安装)
查看>>
python基本数据类型之字典
查看>>
隐藏元素之后改变窗体大小时echarts显示异常问题
查看>>
Centos7上yum安装nagios
查看>>
【实战】多台NFS客户机挂载同一台NFS服务器时,每台客户机都能对共享文件进行读写操作...
查看>>
Shell脚本编程(上)
查看>>
Python学习笔记__1.3章 list和tuple
查看>>
自动安装red hat enterprise linux
查看>>
爱创课堂每日一题第二十一天-移动端性能优化?
查看>>
kafka学习笔记:知识点整理(二)
查看>>
MongoDB日常运维操作命令小结
查看>>
PHP描述冒泡排序和快速排序算法
查看>>
Engineer04
查看>>
安装CentOS 6.5 系统
查看>>
创建YUM仓库
查看>>
2018-05-28笔记(软件包安装和卸载)
查看>>
Spring Boot 如何极简入门?
查看>>