python函数调用的五种方式

枫铃3年前 (2021-09-30)Python232

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

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

def 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

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。