函数基础(二)(day11整理)
目录
昨日内容
函数的定义
只检测语法,不执行代码
def 函数名():
代码
函数的三种定义方式
空函数
有参函数
无参函数
函数的调用
函数的返回值
- return可以返回值,默认返回None,rentun后面不加东西也返回None
- return可以终止函数,有多个return,执行到第一个就终止
- return可以返回多个值,以元组形式返回
函数的参数
形参
接受实参,具有描述意义
位置形参
从左到右依次接收位置实参
默认形参
- 默认值,如果传参,使用传参的值,否则使用默认值(形参会多次使用同一个值)
- 默认形参必须放在位置形参后面
实参
具体的值,传参给形参
位置实参
从左到右依次传参给位置形参
关键字实参
- 按照形参名传参(参数较多使用)
- 关键字实参必须得在位置实参的后面
今日内容
可变长参数
可变长形参
*形参名
def f1(*a): # 调用函数时,有多少个位置实参,就接受多少个参数
print(a)
f1() # a是空元组
f1(1) # (1, )
f1(1,2) # (1,2)
*args(约定俗成),用元组接收多余的位置实参
**形参
def f1(**kwargs): #
print(kwargs)
f1() # 空字典
f1(x = 1) # {x:1}
f1(1,2) # (1,2)
**kwargs,用字典接受多余的关键字实参
def f1(*args,**kwargs):
print(args,kwargs)
f1(11,1,12,x = 1,x=2)
可变长实参(仅作了解)
*实参
def f1(a,b,c,d,e,f):
print(a,b,c,d,e,f)
lt= [1,2,3,4,5,6]
# f1 = (lt[0],lt[1],lt[2],lt[3],lt[4],lt[5],lt[6])
f1(*lt) # *lt把列表中的元素打散成位置实参依次传给位置实参
**实参
def f1(*args,*kwargs): # 可接受所有类型
print(args,kwargs)
def g1(a,b):
print(a,b)
dic = {'a':1,'b'=2}
g1(**dic) # a = 1,b = 2
f1(**dic) # **dic把字典打散成关键字实参传给函数
函数对象
python中一切皆对象
s = '12'
引用
s1 = s容器元素
lt = [s]作为函数的实参
def f1(x): print(x) f1(s)作为函数的返回值
def f1(s): return s s2 = f1(s)
字典/列表/元组/集合/布尔值,所有对象都可以以上四件事情
引用
def f1(): print('from f1') # 函数对象 = 函数名 func = f1 func() # f1()当作容器元素
lt = [f1,1,2,3] lt[0]() # f1()当作函数实参
def f2(f2_f1): print(f2_f1) f2_f1() f2(f1) print(f1)做函数的返回值
def f2(f2_f1): return(f2_f1) res = f2(f1) #f1 res() # f1()
函数嵌套
函数内部定义的函数,外部不能用
名称空间和作用域
名称空间
变量名/函数名都叫名称
名称空间:专门存储名称
内置名称空间(存储内置方法名称)
数据自带内置方法,python解释器自带内置方法(print/len)
全局名称空间:除了内置和局部
def f1(): x =10 y = 10 lt = [1,2,3]局部名称空间:函数内部定义的
名称空间的执行(生成)顺序
- 内置名称空间:python解释器启动就会有
- 全局名称空间:执行代码时候才会有
- 局部名称空间:函数调用的时候才会有局部
搜索顺序:先从当前所在位置搜索,找不到再按照局部>全局>内置>报错的顺序,不会逆向寻找
作用域
全局作用域
内置名称空间+全局名称空间
局部作用域
局部名称空间
全局作用域的x和局部作用域的x没有关系
局部作用域1的x和局部作用域2的x也没有关系,即使局部作用域1和局部作用域2在同一个局部
了解
global:打破了上述第一点规则
x= 10 def f1(): global x # 让global以下局部的x变成全局 x = 20 f1() print(x) # 20nonlocal:打破上述第二点规则
def f1(): def f2(): def f3(): nonlocal x # nonlocal让x成为顶层函数的局部,但是不能成为全局 x = 1 x = 2 f3() f2()
python3中,所有可变数据类型均可打破上述一切规则
lt = [10]
def f1():
lt[0] = 11
f1()
print(lt) # [11]
- 拓展(面试题)
def f1(i,lt=[]):
lt.append(i)
print(lt)
for i in range(3):
f1(i)
[0]
[0,1]
[0,1,2]
def f1(i,lt):
lt.append(i)
print(lt)
fori in range(10):
f1(i,[])
[0]
[1]
[2]
函数基础(二)(day11整理)的更多相关文章
- Less-mixin函数基础二
//mixin函数 基础使用方法 --包含选择器,example: .test(){ &:hover{ border:1px solid red; } } button{ .test; } / ...
- python 18 函数基础二
转自 http://www.cnblogs.com/BeginMan/p/3173328.html 一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装 ...
- 函数基础(一)(day10整理)
目录 昨日内容 文件的基本应用 什么是文件 操作文件的流程 打开文件的三种模式 文件打开的两种方式 绝对路径和相对路径 绝对路径 相对路径 with管理文件上下文 文件的高级应用 新的打开文件的模式 ...
- PHP基础入门(二)【PHP函数基础】
PHP基础入门(二)--函数基础 了解 PHP基础入门详解(一) 后,给大家分享一下PHP的函数基础. 这部分主要讲的就是: 函数的声明与使用.PHP中变量的作用域.静态变量.函数的参数传递.变量函数 ...
- SVG.js 基础图形绘制整理(二)
一.折线 var draw = SVG('svg1').size(300, 300); //画折线 //使用字符串点 // var polyline=draw.polyline('0,0 100,50 ...
- LR函数基础(一)(二)
LR函数基础(一) 函数用到:web_reg_find(). lr_log_message(). lr_eval_string().strcmp().atoi() Action(){ web_r ...
- jdbc基础 (二) 通过properties配置文件连接数据库
csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...
- Python 函数基础、有序集合、文件操作(三)
一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...
- 【2017-03-05】函数基础、函数四种结构、ref和out参数、递归
一.函数基础 1.函数/方法:非常抽象独立完成某项功能的一个个体 2.函数的作用: 提高代码的重用性提高功能开发的效率提高程序代码的可维护性 3.分类 固定功能函数高度抽象函数 4.函数四要素:输入, ...
随机推荐
- (java实现)顺序表-ArrayList
什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入 ...
- selenium-04-验证码问题
对于web应用来说,大部分的系统在用户登录时都要求用户输入验证码,验证码的类型的很多,有字母数字的,有汉字的,甚至还要用户输入一条算术题的答案的,对于系统来说使用验证码可以有效果的防止采用机器猜测方法 ...
- .Net Reactor混淆导致匿名类处理出现的问题处理分析
.Net Reactor 是一款比较不错的混淆工具,比VS自带的那个好用很多,一直以来也陪伴着我们的成长,虽然没有完美的混淆工具,不过也算还是不错的,至少能在一定程度上对DLL进行一定的保护处理. 不 ...
- springboot全局异常拦截源码解读
在springboot中我们可以通过注解@ControllerAdvice来声明一个异常拦截类,通过@ExceptionHandler获取拦截类抛出来的具体异常类,我们可以通过阅读源码并debug去解 ...
- redis分布式锁-自动超时锁(在用)
1.加锁代码结构 2.解锁代码结构 3.java实例 4.测试类 5.测试日志 加锁代码结构 def acquire_lock_with_timeout(conn,lockname,acquire_t ...
- java架构之路-(SpringMVC篇)SpringMVC主要流程源码解析(下)注解配置,统一错误处理和拦截器
我们上次大致说完了执行流程,也只是说了大致的过程,还有中间会出错的情况我们来处理一下. 统一异常处理 比如我们的运行时异常的500错误.我们来自定义一个类 package com.springmvcb ...
- [Tricks] 为文件夹右键菜单增加 【使用VS Code 打开】
传统的IDE安装之后都会在文件夹的右键菜单中增加如[Open in Visual Studio]或者[Open Folder as IntelliJ IDEA Project]这样的选项 但VS Co ...
- Spark 学习笔记之 Streaming和Kafka Direct
Streaming和Kafka Direct: Spark version: 2.2.0 Scala version: 2.11 Kafka version: 0.11.0.0 Note: 最新版本感 ...
- Video/audio标签的一些基础使用心得
常用方法 .play():用于音频视频的播放 .pause():用于音频视频的暂停 常用属性 <audio src="Batmobile Battle Mode Reveal Musi ...
- 一步步剖析spring bean生命周期
关于spring bean的生命周期,是深入学习spring的基础,也是难点,本篇文章将采用代码+图文结论的方式来阐述spring bean的生命周期,方便大家学习交流. 一 项目结构及源码 1. ...