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学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
随机推荐
- spring 学习 二 IOC/DI
中文名称:控制反转 英文名称:( Inversion of Control ) 1 控制反转作用: 一般在编写java程序时,需要程序员自己创建对象的实例,例如 A a=new A();语句,就是程序 ...
- canvas 实现弹跳效果
一:创建画布 <canvas width="600" height="600" id="canvas"></canvas& ...
- mysql 5.7 修改密码
mysql 5.7 ,user表就没有password 这个字段了. ') where user='root' and host='localhost'; 这样当然就改不了密码了. ') where ...
- 如何查看Python内置模块的实现代码
方法1:使用help(random) >>> import random >>> help(random) Help on module random: NAME ...
- 2018.12.22 spoj7258 Lexicographical Substring Search(后缀自动机)
传送门 samsamsam基础题. 题意简述:给出一个串,询问第kkk大的本质不同的串. 然而这就是弦论的简化版. 我们把samsamsam建出来然后贪心选择就行了. 代码: #include< ...
- win7 C环境搭建
1 http://jingyan.baidu.com/article/14bd256e4cb86ebb6d261287.html 2 http://jingyan.baidu.com/arti ...
- AngularJS中$interval和$timeout的使用
我们在项目中会出现定时刷新,延迟加载等多种场景. 接下来就看$interval和$timeout的使用 $interval可用于定时任务,我们只需在controller注入$interval即可使用. ...
- 20155205 2016-2017-2 《Java程序设计》第9周学习总结
20155205 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JD ...
- linux上搭建solr(用jetty部署)
环境搭建:centos7及solr7版本 描述:最新版本的solr内置了jetty容器,可以支持jetty部署,从而不需要发布到tomcat下面 首先同样先在/usr/local/mypackage上 ...
- 可以替代alert 的漂亮的Js弹框
1 基本弹框 2确认框 3又一种确认框 4带返回的弹框 5带返回的探矿 6 6 一切尽在 http://t4t5.github.io/sweetalert/