函数基础(二)(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) # 20
nonlocal:打破上述第二点规则
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.函数四要素:输入, ...
随机推荐
- .Net Core 跨平台:一个简单程序的多平台(windows、Linux、osx)发布
.Net Core 跨平台:一个简单程序的多平台(windows.Linux.osx)发布 .Net Core 3.0 已于2019年9月23日发布了,包含了一些新特性,具体参见Announcing ...
- 利用Python与selenium自动化模拟登陆12306官网!
近年来,12306的反爬越来越来严重,从一年前的 获取tk参数后到现在增加了 JS.CSS等加密方式! 目前大部分人利用的登陆方式都是利用selenium ,此文也不例外. 环境: Wi ...
- SSM框架手动实现分页逻辑(非PageHelper)
第一种方法:查询出所有数据再分页 分析: 分页时,需要获得前台传来的两个参数,分别为pageNo(第几页数据),pageSize(每页的条数); 根据这两个参数来计算出前端需要的数据是查出数据list ...
- spring5 源码深度解析----- AOP目标方法和增强方法的执行(100%理解AOP)
上一篇博文中我们讲了代理类的生成,这一篇主要讲解剩下的部分,当代理类调用时,目标方法和代理方法是如何执行的,我们还是接着上篇的ReflectiveMethodInvocation类Proceed方法来 ...
- asp.net core刷新css缓存
在非spa程序开发的时候.css经常会因为浏览器的缓存机制导致不刷新. 很多前端为了应对这个问题,都会引入webpack或者gulp等工具来处理css缓存的问题. 但是作为一个偏服务器端的程序员来说. ...
- 04、JDBC范例
范例:JDBC查询 package com.hsp; import java.sql.Connection; import java.sql.DriverManager; import java.sq ...
- jmeter从获取token开始设计接口
用自己实习时候的一个项目来实现一下获取token的接口测试 以登录dmp的学科列表为例子: 从登录开始,打开开发者选项 点击登录 在开发者窗口中network xhr Fildder中,看登录时的请求 ...
- 通过实例理解Java网络IO模型
网络IO模型及分类 网络IO模型是一个经常被提到的问题,不同的书或者博客说法可能都不一样,所以没必要死抠字眼,关键在于理解. Socket连接 不管是什么模型,所使用的socket连接都是一样的. 以 ...
- 做高逼格程序员之说走就走的「Linux To Go 」
简介:想拥有一个Linux,在自己的电脑上安装双系统太麻烦.想和WTG一样,随插随用. 使用LTG的好处 安装.修复系统:配置好后的Linux系统极其强大. 工作中我们同样可以使用这个系统,回到家里插 ...
- 我在用的翻译软件 -> 微软翻译+网易有道词典+谷歌翻译
Windows网页翻译 因为微软翻译相对来说翻译网页更为准确,我也喜欢用谷歌的Chrome浏览器,但是我没找到微软翻译的扩展,这里只能放弃 这个需要配合Microsoft Edge浏览器进行使用,也是 ...