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

# -*- 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

第二种:#关键字调用

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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)

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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的情况下给程序增添功能

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

等等,我要在需求之前先说装饰器的原则组成:
< 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 >

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
improt timedef test():time.sleep(2)print("test is running!")def deco(func):  start = time.time()func() #2stop = 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

python函数调用的五种方式相关推荐

  1. python函数调用的三种方式_python函数调用的四种方式

    原标题:python函数调用的四种方式 第一种:参数按顺序从第一个参数往后排#标准调用 运行结果: 第二种:#关键字调用 注意:关键调用从哪开始的,从哪以后都必须使用关键字调用除了'*'收集参数.不能 ...

  2. python函数调用的三种方式_判断python对象是否可调用的三种方式及其区别

    基本上判断python对象是否为可调用的函数,有三种方法: 1.使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定 ...

  3. 下列哪个不是目前python里的内置模块-python引入模块的五种方式与内置模块

    模块导入的五种方式 1.import 模块名 2.from 模块名 import 方法名 3.from 模块名 import * 4.import 模块名 as 别名 5.from 模块名 impor ...

  4. python引入模块的五种方式与内置模块

    模块 自定义模块 模块的定义与分类 模块的定义 简而言之,模块就是一些常用功能的集合,我们把一些常用的函数.变量或者方法写到一个python文件中,那么这个python文件就是模块,使用模块可以避免我 ...

  5. java clone方法_干货满满:Java中创建对象的五种方式详解

    通常来说,对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为. 作为Java开发者,我们通常都是使用依赖管理系统,比如Spring去创建Java对象,但使用管理系统创建对象并不是唯一 ...

  6. Github项目解析(九)--实现Activity跳转动画的五种方式

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了在Activity ...

  7. 基础知识:编程语言介绍、Python介绍、Python解释器安装、运行Python解释器的两种方式、变量、数据类型基本使用

    阅读目录 今日学习内容: 1.编程语言的介绍 2.Python介绍 3.安装Python解释器(多版本共存) 4.运行Python解释器程序两种方式.(交互式与命令行式)(♥♥♥♥♥) 5.变量(♥♥ ...

  8. python最快的循环方法_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  9. 五种方式让你在java中读取properties文件内容不再是难题

    2019独角兽企业重金招聘Python工程师标准>>> 方式1.通过context:property-placeholder加载配置文件jdbc.properties中的内容 < ...

  10. java 给对象创建实例_Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

最新文章

  1. Linux系统程序运行时加载动态库路径顺序
  2. RabbitMQ ——“Hello World”
  3. IO流基础,创建File对象与方法是用
  4. vs2012创建Windows服务
  5. How to check if one event is cancel event - #Exit#
  6. C#.Net工作笔记004---visual studio中的小技巧提高开发效率_随时更新
  7. 使用ArcGIS软件进行投影变换和坐标校正
  8. Java中类和对象的区别
  9. 漂浮式半潜风机(二)环境荷载
  10. Image MagicK 常用命令
  11. mysql数据库是什么语言_mysql是一种程序设计语言吗?
  12. 第三章 决策树-隐形眼镜
  13. 一个教训:养成良好的编程习惯的重要性
  14. 鄙人从事IT业已经有9年时间,少壮不努力,长大搞IT
  15. 树莓派python3的opencv下载(编译失败第六步必看)
  16. Tomcat工作原理详解
  17. 线上微课堂:信号与系统
  18. Http meta详解
  19. c语言中黑色的鼠标变宽,大师解答win7系统鼠标光标变成黑色方块了的设置方案....
  20. python画图,中文字体乱码,设置plt.rcParams不成功时

热门文章

  1. Deepfacelab 新手教程(转载)
  2. php gethostbyname ipv6,支持IPV6方法
  3. 什么是pip?Python新手入门指南
  4. 查询 JetsonNano I2C 的工作频率(波特率)
  5. 砂.随笔.十七.谋定而后动
  6. 在Android上加载具有AI危害检测的TensorFlow模型
  7. springboot中.yml 用jasypt 密码加密
  8. stm32单片机按键消抖、长按、多击终极解决方案
  9. element树形Tree组件控制allow-drop拖拽
  10. 复制出来的虚拟机加入域提示试图加入域的SID与本计算机的SID相同解决方法