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

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

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

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

test is running!
the run time is 3.0009405612945557

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

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

python函数调用的四种方式 --基础重点的更多相关文章

  1. 函数调用的四种方式 和 相关的 --- this指向

    this:表示被调用函数的上下文对象. arguments:表示函数调用过程中传递的所有参数. 这两个参数都是隐式的函数参数.会静默传递给函数,并且和函数体内显式声明的参数一样可正常访问. argum ...

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

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

  3. 横向对比分析Python解析XML的四种方式

    横向对比分析Python解析XML的四种方式 在最初学习PYTHON的时候,只知道有DOM和SAX两种解析方法,但是其效率都不够理想,由于需要处理的文件数量太大,这两种方式耗时太高无法接受. 在网络搜 ...

  4. Java基础知识强化25:Java创建对象的四种方式

    1. Java程序中对象的创建有四种方式: ● 调用new语句创建对象,最常见的一种 ● 运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Const ...

  5. .net core 2.x - 缓存的四种方式

    其实这些微软docs都有现成的,但是现在的人想对浮躁些,去看的不会太多,所以这里就再记录下 ,大家一起懒一起浮躁,呵呵. 0.基础知识 通过减少生成内容所需的工作,缓存可以显著提高应用的性能和可伸缩性 ...

  6. CMDB资产采集的四种方式

    转 https://www.cnblogs.com/guotianbao/p/7703921.html 资产采集的概念 资产采集的四种方式:Agent.SSH.saltstack.puppet 资产采 ...

  7. C#批量插入数据到Sqlserver中的四种方式

    我的新书ASP.NET MVC企业级实战预计明年2月份出版,感谢大家关注! 本篇,我将来讲解一下在Sqlserver中批量插入数据. 先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的 ...

  8. C#_批量插入数据到Sqlserver中的四种方式

    先创建一个用来测试的数据库和表,为了让插入数据更快,表中主键采用的是GUID,表中没有创建任何索引.GUID必然是比自增长要快的,因为你生成一个GUID算法所花的时间肯定比你从数据表中重新查询上一条记 ...

  9. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

随机推荐

  1. Java-ServletContextEvent-ServletContextAttributeEvent

    //这是一个事件类用来通知一个web 应用的servlet 上下文的改变 public class ServletContextEvent extends java.util.EventObject ...

  2. Erlang cowboy 处理简单的HTTP请求

    Erlang cowboy 处理简单的HTTP请求 原文出自: Handling plain HTTP requests 处理请求的最简单的方式是写一个简单的HTTP处理器.它的模型参照Erlang/ ...

  3. 初探linux子系统集之led子系统(一)

    就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...

  4. LeetCode(50)-Word Pattern

    题目: Given a pattern and a string str, find if str follows the same pattern. Here follow means a full ...

  5. rails中weill_paginate的paginate方法中不能使用额外参数的解决办法

    我们知道高版本中的rails中的分页功能已经放在will_paginate这个gem中,我们在控制器方法中往往需要调用其paginate方法来实现分页数据集控制,举个例子:正常的情况我们想要每页显示1 ...

  6. seo建站需要注意哪些

    seo建站是搜索引擎优化的意思,通过seo建站技术,我们可以为站点带来可观的流量.那么,要怎样才能做好seo建站?seo建站优化过程中应该注意的事项有哪些?这些问题,是每一个站长都关心的.鉴于此,笔者 ...

  7. ## 分享一下Mac(苹果电脑)里面好用的软件!

    该文章主要分享 Mac电脑常用的软件 文章来源于 github小弟调调™的仓库转载 说明 [Open-Source Software][OSS Icon] 表示 开源软件 ,点击进入 开源 仓库: ...

  8. LindDotNetCore~框架介绍及特色功能(有点springboot的意思)

    LindDotNetCore模块介绍 大叔博客 LindDotNetCore相关模块介绍 [x] 全局都是依赖DI [x] 消息队列 [x] NoSql [x] Caching [x] 仓储 [x] ...

  9. Flask框架之 --- 我的第一个个人网站(雏形)

    现在还是个静态网站 , 而且这里的Flask也只是起到了提供虚拟web服务器的作用  , 下一步是实现数据库的连接 , 实现简单的动态访问.

  10. openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)

    openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案) --大部分的网站都要涉及到图片缩略图的处理,比如新闻配图,电 ...