Python 学习第三部分函数——第一章函数基础
函数是python 为了代码最大程度的重用和最小代码冗余而提供的最基本的程序结构。使用它我们可以将复杂的系统分解为可管理的部件。
函数相关语句
def... 创建一个对象并将其赋值给某一个对象
return 将一个结果对象发送给调用者
global 声明了一个模块级的变量并赋值
nonlocal 声明了将要赋值的一个封闭的函数变量
yield 向调用者发回一个结果对象,但是记住它离开的地方
lambda 创建一个对象,将其结果返回
函数定义和调用
实例一:
def times(x,y): #函数定义
return x*y #函数主体 #函数调用
a = times(3,4)
b = times('hello',4)
print(a,b) #12 hellohellohellohello
实例二:求两个集合的交集
def intersect(seq1,seq2):
res = []
for i in seq1:
for i in seq2:
res.append(i)
return res #函数调用 s1 = 'admin'
s2 = 'awsemis'
print(intersect(s1,s2)) #['a','m','i']
作用域
在任何情况下,一个变量的作用域(它所使用的地方)总是由在代码中被赋值的地方所决定,并且与函数调用完全没有关系。实际上,变量可以在3个不同的地方分配,分别对应3种不同的作用域:
1. 如果一个变量在def内赋值,它被定位在这个函数内。
2. 如果一个变量在一个嵌套的def中赋值,对于嵌套的函数来说,它是非本地的。
3. 如果在def之外赋值,它就是整个文件全局的。
a = 99 #a为全局变量
def num_a():
a=88 # a为本地变量(只在def语句内是可见的)
return a
print(a) #
print(num_a()) #
尽管这两个变量名都是 a,但是它们的作用域可以把它们区别开来。实际上,函数的作用域有助于防止程序之中变量名的冲突域,并且有助于函数成为更加独立的程序单元。
作用于法则:
函数定义了本地作用域,而模块定义的是全局作用域。这两个作用域有如下的关系
1.内嵌的模块是全局作用域。
2.全局作用域的作用范围仅限于单个文件
3.每次对函数的调用都创建了一个新的本地作用域。
4.赋值的变量名除非声明为全局变量或非本地变量,否则均为本地变量
5.所有其他的变量名都可以归纳为本地、全局或者内置的。
python 的作用域的关系如下:

变量名引用分为三个作用域进行查找:首先是本地(L),之后是函数内(E)(如果有的话),之后全局(G),最后是内置(B)。
实例:
#Global scope 全局作用域
x = 99 # x和func为全局作用域(global scope)
def func(y):
#Local scope 本地作用域
z = x + y #y和z 为本地作用域(local scope)
return z
print(func(1)) #
global语句
它是一个命名空间的声明。它告诉python函数打算生成一个或多个全局变量名。
全局变量名总结:
1. 全局变量是位于模块文件内部的顶层的变量名。
2. 全局变量如果是在函数内被赋值的话,必须经过声明。
3. 全局变量名在函数的内部不经过声明也可以被引用。
x = 88 # x 为global
def func():
global x #声明后,函数外部的变量x就会被改变。不加这个声明是不能改变外部变量的。
x = 99
func()
print(x) #
嵌套作用域实例
x = 99 #global 全局作用域
def f1():
x=88 # enclosing 函数内作用域
def f2():
print(x) #先找本地,本地找不到找函数内,遵循LEGB法则
f2() #在函数里面调用函数f2
f1() #88 #调用f1函数
nonlocal语句
nonlocal和global一样,声明了将要在一个嵌套的作用域中修改的名称。
区别之处:nonlocal应用于一个嵌套的函数的作用域中的一个名称,而不是所有def之外的全局模块作用域;而且在声明nonlocal名称的时候,它必须已经存在于该嵌套函数的作用域中。
参数
必须参数
关键字参数
默认参数
不定长参数(*)
不定长参数(**)
def info(name,age,sex='男'): #sex = '男' 为默认参数(默认参数必须放后面)
print('Name:%s\nAge:%d\nSex:%s'%(name,age,sex)) '''必须参数'''
info('xp',26) '''关键字参数'''
info(age = 26,name = 'xp') info('pp',26,sex='女') '''不定长参数'''
def add(*args):
print('对元素进行求和:',args) # 传进参数打印结果是元组类型
sum=0
for i in args:
sum += i
print('求和结果:',sum) add(1,2,3) '''不定长参数二'''
def info(*args,**kwargs):
# print(args)
print(kwargs) # 打印出 字典 格式
for i in kwargs:
print('%s:%s'%(i,kwargs[i])) info('xp', 26,sex = '男',job = 'IT')
info()
位置关系
结论:
*args参数放在左边,**kwargs参数放在右边
默认参数在左边,*args参数放在左边,**kwargs参数放在右边
未完待续。。。。。
Python 学习第三部分函数——第一章函数基础的更多相关文章
- python学习第三天第一部分
字典 1.字典的定义和规则: 定义:{key1:value1,key2:value2} key 的定义规则:1.必须是不可变的(数字.字符串.元组):2.必须是唯一的, value的定义规则:任意类型 ...
- 《python学习手册》第32章 异常基础
发生异常与默认的异常处理 当发生异常的时候,我们代码没有刻意捕获这个异常,所以它会一直向上返回到程序顶层,并启用默认的异常处理器:打印标准出错信息.而且会终止程序. 执行下面程序 def fu ...
- web前端学习python之第一章_基础语法(二)
web前端学习python之第一章_基础语法(二) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- javascript进阶课程--第一章--函数
javascript进阶课程--第一章--函数 学习要点 了解内存管理 掌握全局函数的使用 知识点 基本类型和引用类型 基本类型值有:undefined,NUll,Boolean,Number和Str ...
- python学习第三次记录
python学习第三次记录 python中常用的数据类型: 整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set). int.数 ...
- python第一章计算机基础
第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 / 显示器 等组成,只有硬件但硬件之间无法进行交流和通信. 1.2 操作系统 操作系统用 ...
- Python 学习 第三天 课后总结:
PYTHON学习第三天课后总结: 1,注释:就是对代码起到说明注解的作用. 注释分为单行注释与多行注释. 单行注释:只注释一行代码在需要注释的所在行的行首使用#号来注释此行,注意#与代码之间需要 ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
随机推荐
- c++智能指针(2)
追加一个shared_ptr指针 #include <memory> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...
- oracle 62进制序列号
create or replace function GetSerial62(v_lpad number default 0) return varchar2 IS v_tmp number(38,0 ...
- windows中执行celery beat任务
由于最新的celery4.2不支持windows系统,因此按照网上的建议安装了3.1.25版.按照官网的说明使用 app.conf.beat_schedule = { 'add-every-30-se ...
- Likecloud—吃、吃、吃(P1508)
题目链接:Likecloud-吃.吃.吃 这题的状态非常的自然. 就是ans[i][j]表示从(i,j)出发,能得到的最大能量值. 那么对应每一个点,我们只要选出他能到达的点的最大值,加上自己就行了. ...
- 用EventLog Analyzer的预定义报表和告警来进行Syslog管理
用EventLog Analyzer的预定义报表和告警来进行Syslog管理 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能 ...
- linux普通用户使用1024以下的端口(80)
linux对于非root权限用户不能使用1024以下的端口,对于一些服务,过高的权限,会带来一定的风险.那么对于低权限的用户如何对外开放1024以下的端口.我这里找到几种办法并且亲测可行 首先搭建环境 ...
- Softmax && Cross-entropy Error
softmax 函数,被称为 归一化指数函数,是sigmoid函数的推广. 它将向量等比压缩到[0, 1]之间,所有元素和为1. 图解: Example: softmax([1, 2, 3, 4, 1 ...
- 2018.12.23 bzoj4516: [Sdoi2016]生成魔咒(后缀自动机)
传送门 samsamsam入门题. 题意简述:给出一个串让你依次插入字符,求每次插入字符之后不同子串的数量. 显然每次的变化量只跟新出现的nnn个后缀有关系,那么显然就是maxlenp−maxlenl ...
- Codeforces Round #546 (Div. 2) D 贪心 + 思维
https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...
- STL六大组件
1.容器 顺序容器.关联容器 2.算法 各种常用算法,sort.search.copy…… 3.迭代器 用来索引容器中元素,是容器与算法之间的胶合剂 4.仿函数(另名函数对象) 仿函数就是让一个类的使 ...