一、函数对象

什么是函数?

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

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 x res=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 x
else:
return y def max4(a,b,c,d):
res1=max2(a,b)
res2=max2(res1,c)
res3=max2(res2,d)
return res3 print(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=111
def inner():
print(x)
return inner f=outter() #f=outter内的inner # x=22222
# f()
def func():
x=3333
f() 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()

    

python-函数入门(二)的更多相关文章

  1. python函数(二)

    python函数(二) 变量的作用域 1.局部变量与全局变量 在函数内创建的变量被称为局部变量,这类变量的生命周期与函数相同,当函数执行完毕时,变量也就随之消失. 此类变量只能在函数内部调用,函数外不 ...

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

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

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

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

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

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

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

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

  6. RobotFramework + Python 自动化入门 二 (关键字)

    在<RobotFramwork + Python 自动化入门 一>中,完成了Robot环境搭建及测试脚本的创建和执行. 本节,对RobotFramework的关键字使用和查看源码进行介绍. ...

  7. Python函数(入门6)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407970.html 本文出自:[Edwin博客园] Python函数 1. Python之调用函数 pri ...

  8. Python——函数入门(二)

    一.函数的参数 我们在定义函数时,可以定义形式参数(简称形参),这些形参的值在函数调用的时候才会确定,形参的值由调用者负责传入. 1.关键字参数 在Python中,函数的参数名并不是没有意义的,在调用 ...

  9. 《转》Python学习(19)-python函数(二)-关于lambda

    转自http://www.cnblogs.com/BeginMan/p/3178103.html 一.lambda函数 1.lambda函数基础: lambda函数也叫匿名函数,即,函数没有具体的名称 ...

  10. python函数入门

    知识内容: 1.函数的作用 2.函数的定义与调用 3.函数的返回值 4.函数的参数 5.局部变量与全局变量 6.作用域 一.函数的作用 1.复用代码 将可能重复执行的代码封装成函数,并在需要执行的地方 ...

随机推荐

  1. 十八、Linux 进程与信号---进程介绍

    18.1 进程的概念 程序:程序(program)是存放再磁盘文件中的可执行文件 进程 程序的执行实例被称为进程(process) 一个程序的执行实例可能由多个 进程具有独立的权限和职责.如果系统中某 ...

  2. 八、文件IO——存储映射

    8.1 存储映射介绍 8.1.1 概念 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写. 文件操作部分映射到虚拟内存的一块区域,我们对虚拟内存映射的那块区域 ...

  3. 四、文件IO——内核数据结构和原子操作

    4.1 缓存 buff 说明 一般设置缓存 buff  的大小是由一定的规律的,就是根据磁盘块的大小来定. Linux下输入命令: df -k  查看磁盘 可以用命令查看下 /dev/sda1 磁盘的 ...

  4. tensorflow--logistic regression

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist=input_data. ...

  5. luogu P3244 [HNOI2015]落忆枫音

    传送门 md这题和矩阵树定理没半毛钱关系qwq 首先先不考虑有环,一个\(DAG\)个外向树个数为\(\prod_{i=2}^{n}idg_i(\)就是\(indegree_i)\),因为外向树每个点 ...

  6. Codeforces712E

    传送门 here 题意: 有n个赌场,第i个赌场的胜率为$ P_i$,在第i个赌场若取胜则到达第$ i+1$个赌场,反之到达第$ i-1$个赌场 定义统治赌场$ L...R$为从赌场$ L$开始,从赌 ...

  7. 实验吧 smali文件分析

    题目链接:http://www.shiyanbar.com/ctf/1871 好吧,这题真是基础中的基础,基础中的战斗机. 不光没有任何绕弯的地方,逻辑有且仅有一个.... 多说无益,使用工具jadx ...

  8. 20165221 JAVA第一周学习心得及体会

    JAVA入门的理论学习 在JAVA2使用教程的网课学中,分为以下几个模块讲解的 JAVA的地位 JAVA的特点 安装JDK(Java Develepement Kit) Java程序的开发步骤 简单的 ...

  9. ActiveMQ中JMS的可靠性机制

    全文用到的生产者代码: package cn.qlq.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory ...

  10. CF1110D Jongmah

    题目地址:CF1110D Jongmah 约定:称形如 \([a-1,a,a+1]\) 这样的三元组为关于 \(a\) 的顺子,形如 \([a,a,a]\) 这样的三元组为关于 \(a\) 的对子. ...