Python 全栈开发:python函数进阶

python函数进阶

函数嵌套

函数对象

命名空间与作用域

闭包函数

装饰器

一、函数嵌套

函数的嵌套定义

def func1():
    print(‘from func1‘)
    def func2(): #func2=内存地址
        print(‘from func2‘)
    print(func2)
func1()

函数的嵌套调用

# 比较两个数的大小
def max2(x,y):
    if x > y:
        return x
    else:
        return y
# 比较三个数的大小
def max3(x,y,z):
    res1=max2(x,y)
    res2=max2(res1,z)
    return res2

print(max3(11,199,2))

# 结果# 199

二、函数对象

函数在python中是第一类对象

1.可以被引用

x=1
y=x
def bar():
    print(‘from bar‘)
f=bar   # 作为对象赋值时 bar代表的值是 内存地址
f()

2.可以当中参数传入(函数名的本质,函数的内存地址)

f=func

3.可以当中函数的返回值

def bar(x):
    print(x)
    x()

bar(func)

4.可以当中容器类型的元素

def bar(x): # x=func
    return x #return func

res=bar(func) #res=func
# print(res)
res()    

三、命名空间与作用域

命名空间:存放名字与绑定关系的空间

命名空间分为三类

内置命名空间:存放Python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效

全局命名空间:文件级别的名字,在执行文件的时候生效,在文件结束或者在文件执行期间被删除则失效

局部命名空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放与局部名称空间), #在函数调用时临时生效,函数结束则失效

三种命名空间之间的加载顺序和取值顺序:
加载顺序:内置(解释器启动时加载,程序运行前加载)-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载)--->内置

取值:在局部调用:局部命名空间--->全局命名空间--->内置命名空间

在全局范围找:

全局----内置----局部使用:   

全局不能使用局部的    

局部的可以使用全局的

作用域:就是作用范围

1、命名空间和作用域是分不开的.

2、作用域分为两种

  全局作用域:全局命名空间与内置命名空间的名字都属于全局范围,在整个文件的任意位置都能被引用,全局有效

  局部作用域:局部命名空间,只能在局部范围内生效

3、站在全局看

  使用名字的时候,如果全局有,用全局的

  如果全局没有,用内置的

4、为什么要有作用域

  为了函数内的变量不会影响到全局

5、

pass

四、闭包函数

闭包:1.闭 :内部的函数
   2.包 :包含了对外部函数作用域中变量的引用

def hei():
  x=20
  def inner():
    x=10 #如果x定义了,他就用自己的了,就实现不了闭包
print(x) 
# 闭包的常用形式:
def hei():
  x=20
  def inner():
    ‘‘‘闭包函数‘‘‘
    print(x)
return inner()

闭包函数的常见形式

判断闭包函数的方法:__closure__

#输出的__closure__有cell元素 :是闭包函数
def func():
    name = ‘eva‘
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f = func()
f()

#输出的__closure__为None :不是闭包函数
name = ‘egon‘
def func2():
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f2 = func2()
f2()

闭包获取网络应用

# from urllib.request import urlopen
# def index(url):
#     def inner():
#         return  urlopen(url).read()
#     return inner
# u=‘http://www.cnblogs.com/Eva-J/articles/7156261.html#_label1‘
# get = index(u)
# print(get())

五、装饰器

pass

原文地址:https://www.cnblogs.com/fixdq/p/8665513.html

时间: 2024-10-29 19:11:17

Python 全栈开发:python函数进阶的相关文章

python全栈开发-Day8 函数基础

python全栈开发-Day8 函数 一 .引子 1. 为何要用函数之不用函数的问题 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大  2. 函数是什么? 针对二中的问题,想象生活中的例子,修理工需要实现准备好工具箱里面放好锤子,扳手,钳子等工具,然后遇到锤钉子的场景,拿来锤子用就可以,而无需临时再制造一把锤子. 修理工===>程序员 具备某一功能的工具===>函数

Python全栈开发【MySQL进阶】

python关于mysql的API--pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymysql 执行sql语句 import pymysql #添加数据 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='yyy') cursor = conn.cursor() # sql = "&

Python全栈之路----函数进阶----名称空间

又名name space,顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的=地方 名称空间共3种,分别如下 locals:是函数内的名称空间,包括局部变量和形参 globals:全局变量,函数定义所在模块的名称空间 builtins:内置模块的名称空间(Python解释器自带的内置模块) >>> x = 1 >>> locals() #处在该区域,打印该区域所有变量 {'__na

Python全栈开发【Django进阶之序列化】

Django序列化 序列化是将对象状态转换为可保持或传输的格式的过程 反序列化是指将存储在存储媒体中的对象状态装换成对象的过程 例如游戏都有存档的功能.再次开始的时候只需读档即可(这即是一个序列化与反序列的过程) 序列化也可以将一个对象传递到另一个地方的 关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 1.serializers 用于序列化QuerySet中的对象 from django.core import serial

Python全栈之路----函数进阶----闭包

关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个这样的内部函数在包含它们之外被调用时,就会形成闭包.也就是说,内部函数会在外部函数返回后被执行.而当这个内部函数执行时,它仍然必须访问其外部函数的局部变量.参数以及其他内部函数.这些局部变量.参数和函数声明(最初时)的值是外部函数的返回时的值,但也会受到内部函数的影响. def func(): n = 10 def func2(): print(

Python全栈之路----函数进阶----作用域的查找空间

n = 10 def func(): n = 20 print('func:',n) def func2(): n = 30 print('func2:',n) def func3(): print('func3:',n) func3() func2() func() 问题:在func3()里打印的n的值是多少?   30 LEGB代表名字查找顺序:locals -> enclosing function -> globals -> _builtins_ locals 是函数内的名字空间

python全栈开发目录

python全栈开发目录 linux命令 初识python python基础数据类型 函数编程.set.深浅拷贝 内置函数 文件操作 装饰器 迭代器和生成器 常用模块 初识类和对象 类和对象(进阶) 反射 异常处理 socket.IO多路复用 线程.进程.协程 HTML CSS JavaScript DOM文档操作 jQuery实例 web框架本质 Tornado mysql基础 mysql进阶 ..... 基本算法 递归--二分法查找 冒泡排序 更多 线程池

Python 全栈开发【第一篇】:目录

Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基础语法入门 Python 全栈开发[第三篇]:数据类型.字符编码.文件操作 第二阶段:函数编程&常用标准库 Python 全栈开发[第四篇]:函数.递归.生成器.迭代器 Pyhton 全栈开发[第五篇]:常用模块学习 第三阶段:面向对象编程&网络编程基础 Python 全栈开发[第六篇]:面向对象

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

Python全栈开发

Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用