函数基础(二)(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、python、MYSQL环境安装
JAVA的环境变量:变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 变量名:JAVA_HOME python的环境变量:变量值: %PY_HOME ...
- Java 基础篇之编程基础
基本数据类型 java 是强类型语言,在 java 中存储的数据都是有类型的,而且必须在编译时就确定其类型. 基本数据类型变量存储的是数据本身,而引用类型变量存的是数据的空间地址. 基本类型转换 自动 ...
- 读《深入理解Elasticsearch》点滴-multi_match
区分按字段为中心的查询.词条为中心的查询 注意高频词项被高得分词项(冷僻的词项)取代的问题 1.best_fields :适用于多字段查询且查询相同文本:得分取其中一个字段的最高分.可通过tie_br ...
- .net core 3.0 Signalr - 04 使用Redis做底板来支持横向扩展
在实际的系统中,可能需要多台机器部署;然而,Signalr的连接信息是跟站点走的,举个例子 推送系统部署了A.B两个服务器,张三访问A服务器,李四访问B服务器,当张三通过A服务器向李四推送的时候,A服 ...
- CSS3自定义浏览器滚动条样式
一个完整滚动条右以下部分组成: ::-webkit-scrollbar 滚动条整体部分,常用属性:width,height,background,border: ::-webkit-scrollbar ...
- php7和php5区别是什么
PHP7距正式发布以及有挺长时间了,刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍.那么php7和php5之间的区别是什么?下面本篇文章就来给大家简单介绍一下,希望 ...
- jQuery插件编写学习中遇见的问题--attr prop
个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...
- [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Control Region)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 逆向分析操作系统内核代码至少需要具备两项技能: 段页汇编代码非常懂 ...
- Linux内存描述之内存区域zone–Linux内存管理(三)
服务器体系与共享存储器架构 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDriver ...
- 移动端Rem布局注意事项
1.布局的总体结构框架: 2.注意事项: (a):如果是左右两栏的布局方式,须在article的同级加一个aside: 因为是同级,所以必须设置同样的样式:而且他俩的父级,也就是sectio ...