python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda

时间:2021-07-21 23:04:44

函数基础


1. 速查笔记

#-- 函数相关的语句和表达式
myfunc('spam') # 函数调用
def myfunc(): # 函数定义
return None # 函数返回值
global a # 全局变量
nonlocal x # 在函数或其他作用域中使用外层(非全局)变量
yield x # 生成器函数返回
lambda # 匿名函数

2. 函数的好处

代码复用、保持代码一致性、可扩展性

函数的参数


1. 速查笔记

#-- 函数参数,不可变参数通过“值”传递,可变参数通过“引用”传递
def f(a, b, c): print(a, b, c)
f(1, 2, 3) # 参数位置匹配
f(1, c = 3, b = 2) # 参数关键字匹配
def f(a, b = 1, c = 2): print(a, b, c)
f(1) # 默认参数匹配
f(1, 2) # 默认参数匹配
f(a = 1, c = 3) # 关键字参数和默认参数的混合
# Keyword-Only参数:出现在*args之后 必须用关键字进行匹配
def keyOnly(a, *b, c): print('') # c就为keyword-only匹配 必须使用关键字c = value匹配
def keyOnly(a, *, b, c): ...... # b c为keyword-only匹配 必须使用关键字匹配
def keyOnly(a, *, b = 1): ...... # b有默认值 或者省略 或者使用关键字参数b = value #-- 可变参数匹配: * 和 **
def f(*args): print(args) # 在元组中收集不匹配的位置参数
f(1, 2, 3) # 输出(1, 2, 3)
def f(**args): print(args) # 在字典中收集不匹配的关键字参数
f(a = 1, b = 2) # 输出{'a':1, 'b':2}
def f(a, *b **c): print(a, b, c) # 两者混合使用
f(1, 2, 3, x = 4, y = 5) # 输出1, (2, 3), {'x':4, 'y':5}

示例:

# -*-  coding:utf-8 -*-
def canshu(a,*args,**kwargs):
print('位置参数值a: %s '%a)
print(args)
print(kwargs)
#函数默认的返回值个数为0时,返回None,如果返回值个数为一个,那么就是return后的值,如果返回值个数大于1,以元组形式返回
#return后的语句,不会再执行
return 0 test= canshu('python','ruby','java',c = 'shell',d = 'perl')
print(test)

运行结果:

位置参数值a: python
('ruby', 'java')
{'c': 'shell', 'd': 'perl'}
0

2. 参数的其他知识点

#-- 函数调用时的参数解包: * 和 ** 分别解包元组和字典
func(1, *(2, 3)) <==> func(1, 2, 3)
func(1, **{'c':3, 'b':2}) <==> func(1, b = 2, c = 3)
func(1, *(2, 3), **{'c':3, 'b':2}) <==> func(1, 2, 3, b = 2, c = 3) #-- 函数属性:(自己定义的)函数可以添加属性
def func():.....
func.count = 1 # 自定义函数添加属性
print.count = 1 # Error 内置函数不可以添加属性 #-- 函数注解: 编写在def头部行 主要用于说明参数范围、参数类型、返回值类型等
def func(a:'spam', b:(1, 10), c:float) -> int :
print(a, b, c)
func.__annotations__ # {'c':<class 'float'>, 'b':(1, 10), 'a':'spam', 'return':<class 'int'>}
# 编写注解的同时 还是可以使用函数默认值 并且注解的位置位于=号的前边
def func(a:'spam'='a', b:(1, 10)=2, c:float=3) -> int :
print(a, b, c)

函数的局部变量与全局变量-作用域


1. 速查笔记

#-- Python函数变量名解析:LEGB原则,即:
"""
local(functin) --> encloseing(相邻的) function locals --> global(module) --> build-in(python)
说明:以下边的函数maker为例 则相对于action而言 X为Local N为Encloseing
""" #-- 嵌套函数举例:工厂函数
def maker(N):
def action(X):
return X ** N
return action
f = maker(2) # pass 2 to N
f(3) # 9, pass 3 to X #-- 嵌套函数举例:lambda实例
def maker(N):
action = (lambda X: X**N)
return action
f = maker(2) # pass 2 to N
f(3) # 9, pass 3 to X #-- nonlocal和global语句的区别
# nonlocal应用于一个嵌套的函数的作用域中的一个名称 例如:
start = 100
def tester(start):
def nested(label):
nonlocal start # 指定start为tester函数内的local变量 而不是global变量start
print(label, start)
start += 3
return nested
# global为全局的变量 即def之外的变量
def tester(start):
def nested(label):
global start # 指定start为global变量start
print(label, start)
start += 3
return nested

2.全局变量的作用域是整个函数,局部变量作用域是定义该变量的子程序

递归函数


定义:在函数内部,可以调用其他函数,如果一个函数在内部调用自身,就是递归函数

特性:① 必须有一个明确的结束条件;② 每一次更深的递归时,问题规模相比上次递归应减少

简单示例:裴波那契数列

def fibo(n):
if n<3:
return 1
return fibo(n-2)+fibo(n-1) print(fibo(5))

匿名函数lambda


1. 速查笔记

#-- 匿名函数:lambda
f = lambda x, y, z : x + y + z # 普通匿名函数,使用方法f(1, 2, 3)
f = lambda x = 1, y = 1: x + y # 带默认参数的lambda函数
def action(x): # 嵌套lambda函数
return (lambda y : x + y)
f = lambda: a if xxx() else b # 无参数的lambda函数,使用方法f() #-- lambda函数与map filter reduce函数的结合
list(map((lambda x: x + 1), [1, 2, 3])) # [2, 3, 4]
list(filter((lambda x: x > 0), range(-4, 5))) # [1, 2, 3, 4]
functools.reduce((lambda x, y: x + y), [1, 2, 3]) # 6
functools.reduce((lambda x, y: x * y), [2, 3, 4]) # 24

python3 速查参考- python基础 6 -> 函数编程之参数、变量、作用域、递归、匿名函数 lambda的更多相关文章

  1. python3 速查参考- python基础 7 -&gt&semi; 函数编程之 装饰器、生成器

    装饰器 1.速查笔记 #-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 @staticmethod def sme ...

  2. python3 速查参考- python基础 8 -&gt&semi; 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

    基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self ...

  3. python3速查参考- python基础 4 -&gt&semi; 元组 &plus; 字典 &plus; 字符串 的学习

    元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...

  4. python3速查参考- python基础 5 -&gt&semi; 常用的文件操作

    文件的打开方式 打开方式 详细释义 r  以只读方式打开文件.文件的指针会放在文件的开头.这是默认模式. rb  以二进制只读方式打开一个文件.文件指针会放在文件的开头. r+  以读写方式打开一个文 ...

  5. python3 速查参考- python基础 9 -&gt&semi; MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令

    前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...

  6. python3速查参考- python基础 3 -&gt&semi; -&gt&semi; while循环实例 &plus; Continue &amp&semi;&amp&semi; break的应用 &plus; 列表的初步学习

    while语句的应用 实例如下: """ 述求:用户登录系统,最多只能登录三次 第三次失败后,程序终止 """ user_table = { ...

  7. python3速查参考- python基础 1 -&gt&semi; python版本选择&plus;第一个小程序

    题外话: Python版本:最新的3.6 安装注意点:勾选添加路径后自定义安装到硬盘的一级目录,例如本人的安装路径: F:\Python 原因:可以自动添加python环境变量,自动关联.py文件,其 ...

  8. python3速查参考- python基础 2 -&gt&semi; if语句应用 &plus; while循环应用

    if语句应用之——求最大值 """ 求三个数字中的最大值,并打印出来 """ a = int(input("a:")) ...

  9. 『Python基础-14』匿名函数 &grave;lambda&grave;

    匿名函数和关键字lambda 匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数 在Python中,如果要声匿名函数,则需要使用lambda关键字 使用lambda声明的匿名函数能接收任何 ...

随机推荐

  1. reset 单个文件 回退

    git将单个文件恢复到历史版本的正确方法如下: git reset commit_id 文件路径 git checkout -- 文件路径

  2. Hibernate配置文档详解

    Hibernate配置文档有框架总部署文档hibernate.cfg.xml 和映射类的配置文档 ***.hbm.xml hibernate.cfg.xml(文件位置直接放在src源文件夹即可) (在 ...

  3. PAT 1023&period; 组个最小数 &lpar;20&rpar;

    给定数字0-9各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意0不能做首位).例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是1001555 ...

  4. 《GK101任意波发生器》升级固件发布(版本:1&period;0&period;2&period;build126)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build126 编译日期:2014-08-23 ====================================== 二. ...

  5. Apache配置站点根目录、用户目录及页面访问属性

    一.配置站点根目录及页面访问属性 DocumentRoot "/www/htdoc" <Directory "/www/htdoc"> Option ...

  6. gson转换带有objectId的问题

    /** * * @Description: objectid 转换成string 不然就会objectid对象序列化了 * @param @param obj * @param @return * @ ...

  7. Webservice-初级实例(二)

    去年这个时候在亿阳工作,经理让我做数据同步功能,用到WS,于是草草研究之后,就投入使用了.前两天同事给我讲解分配给我的项目时,讲到其中一块是数据同步功能,我不禁一笑,同事问笑什么,我说世界真是奇妙,去 ...

  8. 微信开发系列——微信订阅号前端开发利器:WeUI

    前言:年前的两个星期,学习了下微信公众号的开发.后端基本能够基于盛派的第三方sdk能搞定大部分事宜.剩下的就是前端了,关于手机端的浏览器的兼容性,一直是博主的一块心病,因为博主一直专注于bootstr ...

  9. HTML-CSS背景渐进色

    一.分类 a>线性渐变:颜色沿着一条直线过度:从 左到右.从上到下等: b>径向渐变:圆形或椭圆形渐变,颜色不再沿着一条直线变化,而是从一个起点朝所有方向混合. 1.线性渐变语法: bac ...

  10. Oracle去除重复&lpar;某一列的值重复&rpar;&comma;取最新&lpar;日期字段最新&rpar;的一条数据

    转自 : http://blog.csdn.net/nux_123/article/details/45037719 问题:在项目中有一张设备检测信息表DEVICE_INFO_TBL, 每个设备每天都 ...