一、函数对象

什么是函数?

函数是第一类对象,指的是函数名指向的值(函数)可以被当做数据去使用

1.函数的特性

1.函数可以被引用,即函数可以把值赋值给一个变量

def foo():print('from foo')foo()
func=foo    #引用,赋值
func()
print(foo)
print(func)

2.函数可以当做参数传给另一个函数

def hi():return "hi yasoob!"def doSomethingBeforeHi(func):print("I am doing some boring work before executing hi()")print(func())doSomethingBeforeHi(hi)

3.可以当做一个函数的返回值

def func(): # func=函数的内地址print('from func')# print(func)

age=10
def bar(x):return xres=bar(age)
print(res)res=bar(func)
print(res)

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

容器对象(list、dict、set等)中可以存放任何对象,包括整数、字符串,函数也可以作存放到容器对象中

def func(): # func=函数的内地址print('from func')
age=10
l=[age,func,func()]
print(l)

二、函数嵌套

函数的嵌套又分为两大类

1.函数的嵌套调用:在调用一个函数的过程中,其内部代码又调用了其他函数

def max2(x,y):if x > y:return xelse:return ydef max4(a,b,c,d):res1=max2(a,b)res2=max2(res1,c)res3=max2(res2,d)return res3print(max4(1,2,3,4))

2.函数的嵌套定义:一个函数内部又定义了另外一个函数

# from math import pi
# # print(pi)
#
# def circle(radius,action=0):
#     """
#     圆形相关运算
#     :param radius: 半径
#     :param action: 0代表求面积,1代表求周长
#     :return: 面积或者周长
#     """
#     def area(radius):
#         return pi * (radius ** 2)
#
#     def perimiter(radius):
#         return 2 * pi * radius
#
#     if action == 0:
#         res=area(radius)
#     elif action == 1:
#         res=perimiter(radius)
#
#     return res
#
# print(circle(10,0))
# print(circle(10,1))

三、名称空间与作用域

1.什么是名称空间:

  名称空间就是用来存放名字与内存地址绑定关系的地方(内存空间),但凡要查找值一定要通过名字,访问名字必须去查找名称空间

2.名称空间的三大类

  内置名称空间:存放的是python解释器自带的名字 例如:len()、man()等

  全局名称空间:存放的是文件级别的名字(不是函数内,不是内置的)

x、y、z、b、foo都是全局
m不是
x=1
y=2
if x=1:z=3
while Ture:b=4
def foo():m=3

  局部名称空间:在函数内部定义的

  生命周期:

    内置名称空间在解释器启动时生效,关闭时则失效

    全局名称空间在解释器解释执行python文件时生效,文件执行完毕后则失效

    局部名称空间只在调用函数时临时产生该函数的局部名称空间

  加载顺序:内置===》全局===》局部

  查找名字的顺序:

    基于当前所在位置往上查找,假设当前站在局部,查找顺序:局部==》全局==》内置

                 假设当前站在全局,查找顺序:全局=》内置

注:名字的查找顺序,在函数定义阶段就已经被固定死了(即在检测语法时就已经确定了名字的查找顺序),与函数调           用位置无关,无论在任何地方调用函数,都必须回到当初定义函数的位置去确定名字的查找关系

# x=111
# def outer():
#     def inner():
#         print('from inner',x) # x访问的时全局名称空间中x
#     return inner
#
# f=outer()
# # print(f)
#
# x=222
# f()

3.作用域

作用域指的是作用的范围,分为两种,全局作用域和局部作用域

1.全局作用域:包含的是内置名称空间与全局名称空间中的名字

  特点:全局有效,全局存活

2.局部作用域:包含的是局部名称空间中的名字

  特点:局部有效,临时存活

补:global  和  nonlocal

#global:在局部声明一个名字是来自于全局作用域的,可以用来在局部修改全局的不可变类型
# x=1
# def foo():
#     global x
#     x=2
#
# foo()
# print(x)#nonlocal:声明一个名字是来自于当前层外一层作用域的,可以用来在局部修改外层函数的不可变类型
# x=0
# def f1():
#     x=111
#     def f2():
#         nonlocal x
#         x=222
#     f2()
#     print(x)
#
# f1()
# print(x)

四、闭包函数

1.什么是闭包函数?

指的是定义一个函数内部的函数,该内部函数包含对外层函数作用域名字的引用

需要结合函数对象的概念将闭包函数返回到全局作用域去使用,从而打破函数的层级限制。

def outter():x=111def inner():print(x)return innerf=outter() #f=outter内的inner# x=22222
# f()
def func():x=3333f()func()

2.为何要用闭包函数?

闭包函数提供了一种为函数体传值的解决方案

3.如何使用闭包函数

为函数传值的方式有两种,参数和闭包(目前所学)

# 为函数体传值的方式一:参数
# def func(x,y):
#     print(x+y)
#
# func(1,2)

# 为函数体传值的方式二:闭包
# def outter(x,y):
#     # x=1
#     # y=2
#     def func():
#         print(x+y)
#     return func
#
# f=outter(1,2)
# f()

    

转载于:https://www.cnblogs.com/mangM/p/9396413.html

python-函数入门(二)相关推荐

  1. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  2. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  3. python 函数(二)

    一.高阶函数 1.函数名可以赋值 2.函数名可以作为函数参数 3.函数名可以作为函数的返回值 def f1(n):return n*ndef f2(a, b, f):return f(a) + f(b ...

  4. python函数(二)

    #6.传递任意个数的参数: #在定义函数时,若参数名前面使用"*",则表示可接受任意个数的参数,这些参数保存在一个元祖中. #定义函数,*代表b是一个元祖,可以接受多个参数 def ...

  5. [转载] python基础入门二

    参考链接: Python集合Set 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)  name = " aleX"  1)移除 name 变量对应的值两边 ...

  6. python正则表达式入门二

    至少出现一次. 和*号的区别在于* 可以出现零次. + 示例 line = "tpyyyyyyypbpr123" regex_str = ".*?(p.+?p).*&qu ...

  7. 如何学习Python爬虫[入门篇]?

    这篇文章已经过去很久了,有一些学习资源链接已经失效了,还一直有小伙伴在Python的路上摸索.所以我根据自己的学习和工作经历整理了一套Python学习电子书,在公众号「路人甲TM」后台回复关键词「1」 ...

  8. 学Python 函数从青铜到王者

    文章目录 Python 入门第三天 Python 函数入门 1.函数定义 2.函数调用 3.函数的命名规则 4.函数的参数 5. 函数的作用域 Python 高级函数 1.嵌套函数 2.装饰器之不带参 ...

  9. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  10. Python基础入门笔记(二)

    前言 本文主要为 Python基础入门笔记(一)内容的补充. 一.迭代器和生成器 1.1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元 ...

最新文章

  1. 解决VS 于 致命错误 RC1015: 无法打开包含文件 #39;afxres.h#39; 问题
  2. Chrome 中的 JavaScript 断点设置和调试技巧
  3. what you CAN LEARN FROM AUTOMATOR AND APPLE STEVE JOBS
  4. linux建立与删除目录
  5. 对POST提交数据限制的解决方案
  6. firl 函数 matlab,经典matlab信号处理学习
  7. feko软件_计算电磁学各种方法和电磁仿真软件简述
  8. YUV序列下采样以及彩色4:2:0与灰度4:0:0转换---基于matlab实现
  9. .NET项目工程生成一份项目帮助文档chm--Sandcastle工具
  10. excel vsto 功能菜单定义
  11. 反黑小技谋:IP地址的侦察和隐藏(转)
  12. 字体管家射手座 - 绿斗堂字体网
  13. 怎么用表格做出html网页,用表格制作网页
  14. win10一根网线连接linux,win10系统使用一根网线连接两台电脑的操作方法
  15. python爬微博步骤手机_新浪微博爬取笔记(2):wap端模拟登陆 python
  16. node.js基于vue框架潮牌官网设计与实现毕业设计源码010955
  17. 金融工程 | 远期与期货概述
  18. linux命令之ls命令
  19. 我今天才知道,原来蒙古包是没有地址的?!
  20. 《一周搞定模电》—集成运算放大器

热门文章

  1. matlab中mod(10 3),matlab的rem()和mod()函数
  2. C Primer Plus第二章总结
  3. LADRC的学习——PID的学习
  4. Python数值特征转换
  5. Shell脚本编程之(三)执行方式差异(source, sh script, ./script)
  6. 重要的Python数据分析库
  7. C++中main函数的返回类型必须是int
  8. Michael Feathers希望消除错误能驱动设计
  9. git 使用笔记(一)
  10. [...]ubuntu rvm rails 安装完之后消失的解决方法