函数基础(二)(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.函数四要素:输入, ...
随机推荐
- 转:ext的xtype值
基本组件: xtype Class 描述 button Ext.Button 按钮 splitbutton Ext.SplitButton 带下拉菜单的按钮 cycle Ext.CycleButton ...
- hadoop之mapreduce详解(进阶篇)
上篇文章hadoop之mapreduce详解(基础篇)我们了解了mapreduce的执行过程和shuffle过程,本篇文章主要从mapreduce的组件和输入输出方面进行阐述. 一.mapreduce ...
- leveldb 源码--总体架构分析
一 本文目的 对leveldb的总体设计框架分析(关于leveldb基本原理,此文不做阐述,读者可以自行检索文章阅读即可),对leveldb中底层数据存储数据格式,内存数据模型,compact,版本管 ...
- [一]基本sqlplus命令
基本sqlplus命令: 1: sqlplus scott/tiger ; #简化连接数据库 2:show user; #想知道当前登陆的用户是哪一位 3:conn 用户名[/密码] [AS SYSD ...
- C# HttpWebRequest 后台调用接口上传大文件以及其他参数
直接上代码,包各位看客能用!!! 1.首先请求参数的封装 /// <summary> /// 上传文件 - 请求参数类 /// </summary> public class ...
- 前沿科技-混合现实(MR)远程协作辅助工具:微缩虚拟形象Mini-Me
今天分享一篇在刚刚结束的CHI’2018上发表的full paper.该文章由来自澳洲University of South Australia的Piumsomboon等人和来自新西兰Universi ...
- Gin框架介绍及使用
Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 如果你是性能和高效的追求者, 你会爱上Gin. ...
- MongoDB 学习笔记之 DBRef
DBRef: MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link).内嵌比较好理解,就是字段内容是个数组,数组内再包含文档,而我们今天介绍的是另一种,称为链接DBRef.由 ...
- MongoDB 学习笔记之 Aggregation Pipeline实战实现inner join
Aggregation Pipeline实战实现inner join: leftT集合: comments集合: 现在我们要用aggregation实现inner join db.comments. ...
- Java 爬虫遇上数据异步加载,试试这两种办法!
这是 Java 爬虫系列博文的第三篇,在上一篇 Java 爬虫遇到需要登录的网站,该怎么办? 中,我们简单的讲解了爬虫时遇到登录问题的解决办法,在这篇文章中我们一起来聊一聊爬虫时遇到数据异步加载的问题 ...