博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的函数
阅读量:4654 次
发布时间:2019-06-09

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

By francis_hao    Oct 31,2018

 

 

官方的函数定义(BNF语法标记)

 

decorator

decorator仅仅是一个语法糖,函数可以使用它被封装起来,其返回值必须是可执行的,decorator语法在定义的时候会被执行。在下例中

@ff

def func(): pass

等同于

def func(): pass

func = ff(func)

ff可以是一个函数或者一个类,详见参考【3】。在定义时,ff(func)会被执行,ff(func)的返回值必须是可执行的。

 

parameter list

参数类型有三类:可赋值参数、元组参数和字典参数

可赋值参数可以设置默认值,之后在调用函数的时候可以省略该参数。如果一个参数设置了默认值,那么其后的可赋值参数也必须设置默认值。

元组参数的形式为"*[parameter]", "*parameter"作用是通过元组接收多余的位置参数,如果省略了parameter,将不接收多余的位置参数("*"的由来见参考【5】),在"*"或"*parameter"后的参数只能是关键字参数,通过关键字传值进去

字典参数的形式为"**parameter",作用是通过字典接收多余的关键字参数,此项都是放在参数列表的最后

 

annotation

有两种形式,一种用于函数参数(上面三种参数均可),用":"标识,另一种用于整个函数,用"->"标识。annotation可以是任何的python表达式。

 

示例

1、decorator

### decorator

print("------ decorator ------")
def ff(fc):
    print("in ff and arg is {}".format(fc))
    return fc
@ff
def func_decor():
    print("in function func_decor")
print("---------------")
func_decor()

输出结果

 

2、parameter list

### parameter

print("\n------ parameter ------")
def func_param1(a, b, *c, **d):
    print(a)
    print(b)
    print(c)
    print(d)
func_param1(1,2,3,4, excess=1)
print("---------------")
def func_param2(a=1, b=2, *, c=4, **d):
    print(a)
    print(b)
    print(c)
    print(d)
func_param2(1,2,excess=1)

输出结果

 

"*"的错误使用示例

a、

def func_param2(a=1, b=2, *, c=4, **d):

    print(a)
    print(b)
    print(c)
    print(d)
func_param2(1,2,3,excess=1)

输出结果如下,"*"不接收多余的位置参数,如果传入多余的参数会抛异常,详见参考【5】

 

b、

def func_param3(a=1, b=2, *, **d):

    print(a)
    print(b)
    print(d)
    
func_param3()

输出结果如下,"*"后面如果有参数,其后的第一个参数必须是关键字参数

 

3、annotation

### annotation

print("\n------ annotation ------")
def func_annot(a:print("parameter a"))->print("return annotation"):
    print("in func_annot : test annotation")
print("---------------")
func_annot(1)

输出结果

 

 

本文由 创作,采用 进行许可。欢迎转载,请注明出处:
转载自:

 

参考

【1】Function definitions

【2】A guide to Python's function decorators

【3】Decorators I: Introduction to Python Decorators

【4】

【5】PEP 3102 -- Keyword-Only Arguments

转载于:https://www.cnblogs.com/yinghao1991/p/9886360.html

你可能感兴趣的文章
Dao层设计
查看>>
css各种姿势的水平居中
查看>>
MYSQL 测试常用语句使用技巧
查看>>
基础细节知识
查看>>
树状数组求区间最大值
查看>>
从面试官角度来告诉大家,哪些人能面试成功
查看>>
以我的亲身经历为例,告诉大家写简历和面试的技巧(面向高级开发和架构师)...
查看>>
一个简单的PHP网站结构
查看>>
Redis 学习之简介及安装
查看>>
jsp简单的学习
查看>>
[LeetCode][JavaScript]Number of 1 Bits
查看>>
[LeetCode][JavaScript]Plus One
查看>>
C语言-06复杂数据类型-01数组
查看>>
同余方程 2012年NOIP全国联赛提高组
查看>>
vue 图片预览插件
查看>>
深入解析:分布式系统的事务处理经典问题及模型
查看>>
python的2种字符串格式化输出
查看>>
Netsharp快速入门(之14) 销售管理(报表A 热销滞销品统计)
查看>>
配置 SQL Server Email 发送以及 Job 的 Notification通知功能
查看>>
线上应用bug跟踪查找-友盟统计
查看>>