Python 学习第三部分函数——第一章函数基础

函数是python 为了代码最大程度的重用和最小代码冗余而提供的最基本的程序结构。使用它我们可以将复杂的系统分解为可管理的部件。

函数相关语句

def...          创建一个对象并将其赋值给某一个对象

return        将一个结果对象发送给调用者

global        声明了一个模块级的变量并赋值

nonlocal    声明了将要赋值的一个封闭的函数变量

yield          向调用者发回一个结果对象,但是记住它离开的地方

lambda      创建一个对象,将其结果返回

函数定义和调用

实例一:

1 def times(x,y):     #函数定义
2     return x*y       #函数主体
3
4 #函数调用
5 a = times(3,4)
6 b = times(‘hello‘,4)
7 print(a,b)     #12 hellohellohellohello

实例二:求两个集合的交集

 1 def intersect(seq1,seq2):
 2     res = []
 3     for i in seq1:
 4         for i in seq2:
 5             res.append(i)
 6     return res
 7
 8 #函数调用
 9
10 s1 = ‘admin‘
11 s2 = ‘awsemis‘
12 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)         #99
print(num_a())   #88
  尽管这两个变量名都是 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))   #100

global语句

它是一个命名空间的声明。它告诉python函数打算生成一个或多个全局变量名。

全局变量名总结:

1. 全局变量是位于模块文件内部的顶层的变量名。

2. 全局变量如果是在函数内被赋值的话,必须经过声明。

3. 全局变量名在函数的内部不经过声明也可以被引用。

x = 88      # x 为global
def func():
    global x   #声明后,函数外部的变量x就会被改变。不加这个声明是不能改变外部变量的。
    x = 99
func()
print(x)   #99

嵌套作用域实例

x = 99      #global 全局作用域
def f1():
    x=88     # enclosing 函数内作用域
    def f2():
        print(x)    #先找本地,本地找不到找函数内,遵循LEGB法则
    f2()            #在函数里面调用函数f2
f1()    #88     #调用f1函数

nonlocal语句

  nonlocal和global一样,声明了将要在一个嵌套的作用域中修改的名称。

  区别之处:nonlocal应用于一个嵌套的函数的作用域中的一个名称,而不是所有def之外的全局模块作用域;而且在声明nonlocal名称的时候,它必须已经存在于该嵌套函数的作用域中。

未完待续。。。。。


原文地址:https://www.cnblogs.com/xp0919/p/9771657.html

时间: 2024-07-31 23:33:04

Python 学习第三部分函数——第一章函数基础的相关文章

python学习第三周(下 函数)

本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值  嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身份证列表 3. 字典 key-value对 特性: 无顺序 去重 查询速度快,比列表快多了 比list占用内存多 为什么会查询速度会快呢?

python学习第三天第一部分

字典 1.字典的定义和规则: 定义:{key1:value1,key2:value2} key 的定义规则:1.必须是不可变的(数字.字符串.元组):2.必须是唯一的, value的定义规则:任意类型 特性:1.可以存放多个值:2.可以修改指定的key对应的值,可变:3.无序 元组的定义:定义符号(),与列表完全一致,唯一不同的是元组内的元素不可变 2.字典的常用操作 dic = {'name':'alex','age':18} 查询的2种方式 print(dic['nameee']) # 不存

Python学习总结之路--第一周

前言:35岁了,工作10年了,一直很排斥学软件编程,但是IT这条路一路走来发现如果不改变这辈子就这样了! 学Python是意外,也是缘分.前年的时候就看到有同事学这,那时他刚参加工作不久.今年他从我们公司走了, 去了甲方,年薪27W.然后我却没有进入我主导的项目甲方.双重打击让我郁闷了很久很久.无意中点开领导发的一次腾讯的免费课堂学习,既然是Python. 学习资料的来源.免费课程很坑,直播的时间我老是有事,录播的视频老是不给更新.所以我就从网上买了一份Python的学习视频,这就开启了我想学P

Python学习(三)数据结构

Python 数据结构 本章介绍 Python 主要的 built-type,包括如下: Numeric types          int float Text Sequence Type       str Boolean              bool Sequence  Types        list tuple range Mapping Types          dict Set Types             set type() 函数 type(object)

APUE学习笔记:第一章 UNUX基础知识

1.2 UNIX体系结构 从严格意义上,可将操作系统定义为一种软件(内核),它控制计算机硬件资源,提供程序运行环境.内核的接口被称为系统调用.公用函数库构建在系统调用接口之上,应用软件即可使用公用函数库,也可使用系统调用.shell是一种特殊的应用程序,它为运行其他应用程序提供了一个接口 从广义上,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并给予计算机以独有的特性(软件包括系统实用程序,应用软件,shell以及公用函数库等) 1.3  shell shell是一个命令行解

OpenCV for Python 学习笔记 三

给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left,right: 分别表示四个方向上边界的长度 borderType: 边界的类型 有以下几种: BORDER_REFLICATE # 直接用边界的颜色填充, aaaaaa | abcdefg | gggg BORDER_REFLECT # 倒映,abcdefg | gfedcbamn | nmabcd

python 学习笔记 三 字典

字典 Python的高效的key/value哈希表结构叫做"dict", dict的内容可以写成一系列的key:value对并放入{ }中, 相当于: dict = {key1:value1, key2:value2, ...}, 一个空的字典就是俩个大括号{ }. 下面是从一个空字典创建字典以及一些关键点: 数字, 字符串和元组可以作为字典的key, value可以是任何类型(包括字典). ## Can build up a dict by starting with the the

【WPF学习】第三十六章 样式基础

原文:[WPF学习]第三十六章 样式基础 前面三章介绍了WPF资源系统,使用资源可在一个地方定义对象而在整个标记中重用他们.尽管可使用资源存储各种对象,但使用资源最常见的原因之一是通过他们的保存样式. 样式是可应用于元素的属性值集合.WPF样式系统与HTML标记中的层叠样式表(Cascading Style Sheet,CSS)标准担当类似的角色.与CSS类似,通过WPF样式可定义通用的格式化特性集合,并且为了保证一致性,在整个应用程序中应用他们.与CSS一样,WPF样式也能够自动工作,指定具体

Python学习第三天--数据类型

数据类型: int()  整型 float()浮点型 e记法   (有点像数学中的科学计数法) 知识点概括: 字符相加,结果为和 >>> 520 + 5201040 2.字符串相加,结果为"拼接" >>> '520'+'1314''5201314' 3.逻辑运算,python认为True=1,False=0,(True和False第一个字母必须为大写) >>> True + True 2 >>> True - Tr