一.函数对象

  函数是第一类对象,第一等公民,函数对象即函数可以被当作变量去用。

具体分为四个方面:

1.可以被赋值

def func():
print('from func')
f = func
print(f is func)
f()

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

def func():
print('from func') def foo(a):
print(a)
a() foo(func)

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

def func():
print('from func') def foo(f):
return f
res = foo(func)
print(res)
res()

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

def func():
print('from func') list = [1,2,func]
print(list)
list[2]()
#用法例子2

def login():
print('登录'.center(50,'*')) def register():
print('注册'.center(50,'*')) def transfer():
print('转账'.center(50,'*')) def withdraw():
print('提现'.center(50,'*')) func_dic = {
"1":["登录",login],
"2":["注册",register],
"3":["转账",transfer],
"4":["提现",withdraw],
} while True:
print("0 退出")
for k in func_dic:
print(k,func_dic[k][0]) choice = input("请输入您的命令编号:").strip()
if choice == "0":
break if choice in func_dic:
func_dic[choice][1]()
else:
print("输入命令错误")

二.函数嵌套

1.函数的嵌套定义

#例1
# def f1():
# x = 111
# def f2():
# print('from f2')
# # print(x)
# # print(f2)
# f2()
#
# f1() #例2
# from math import pi
#
# def circle(radius,mode=0):
# def perimiter(radius):
# return 2 * pi * radius
#
# def area(radius):
# return pi * (radius ** 2)
#
# if mode == 0:
# return perimiter(radius)
# elif mode == 1:
# return area(radius)
#
# circle(3,1)

2.函数的嵌套调用

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 res = max4(1,2,3,4)
print(res)

三.名称空间与作用域

(一).名称空间(Namespaces):存放名字与其对应的内存地址的地方

名称空间分为三大类:

1.内置名称空间:存放的是Python解释器自带的名字

  生命周期:解释器启动则产生,解释器关闭则销毁

print(len)
print(input)

2.全局名称空间:存放的是顶级的名字,不是函数内定义,也不是内置的

  生命周期:Py程序刚开始运行则立即产生。Py程序结束销毁

# x = 10

# if True:
# y = 2 # def foo():
# z = 3

3.局部名称空间 :存放的是函数内的名字

  生命周期:函数调用则产生,函数调用结束则销毁

# def foo():
# len = 222
# # print(len)
#
# foo()

###总结:

    1.名字的访问优先级:基于自己当期所在的位置向外一层一层查找,L-》E-》G-》B

    2.名称空间的‘嵌套’关系是函数定义阶段、扫描语法时生成的,与调用位置无关

x = 0

def f1():
def f2():
# x = 2222
def f3():
# x = 3333
print(x)
f3()
x = 1111
f2() f1()

 

# # 案例1:
# x = 666
# def f1():
# print(x) #赋值前引用报错
# x=111
#
# f1() # 案例2:
x = 666 def f1():
x = 1111
def f2():
print('f2===>',x)
return f2 f = f1() def foo():
x=77777777777777777
f() foo() #结果: 1111

(二).作用域  

1.全局作用域:内置名称空间、全局名称空间

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

2.局部作用域:局部名称空间

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

#global:用来在局部修改全局的不可变类型的值

# x = 100
#
# def login():
# global x
# x = 200
# login()
# print(x)

  

#nonlocal:可以将名字声明为来自外部嵌套函数定义的作用域(非全局)

#nonlocal x 会从当前函数的外层函数一层层去查找名字x,若是一直到最外层函数都找不到,则抛出异常

 

# def f1():
# x = 100
# def f2():
# # global x
# nonlocal x
# x = 200
# f2()
# print(x)
# f1()

  

day9.函数2的更多相关文章

  1. day9函数作业详解

    1.day9题目 1,整理函数相关知识点,写博客. 2,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. 3,写函数,判断用户传入的对象(字符串.列表.元组 ...

  2. python全栈开发-Day9 函数对象、函数嵌套、名称空间与作用域

    一 .函数对象 一 .函数是第一类对象,即函数可以当作数据传递 可以被引用 可以当作参数传递 返回值可以是函数 可以当作容器类型的元素 二. 利用该特性,优雅的取代多分支的if def foo(): ...

  3. python全栈学习--day9(函数初始)

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  4. python—day9 函数的定义、操作使用方法、函数的分类、函数的嵌套调用

    一.函数的定义 函数的四个组成部分: 函数名. 函数体. 函数返回值. 函数参数 1.概念:重复利用的工具,可以完成特定功能的代码块,函数是存放代码块的容器 2.定义: def:声明函数的关键词 函数 ...

  5. Python学习day9 函数Ⅰ(基础)

    函数Ⅰ(基础) 三目运算 基本结构 v =  前面  if 条件 else 后面    #条件为真v=前面,条件为假v=后面.​#等同于if 条件: v = '前面'else:    v = '后面' ...

  6. DAY9 函数

    一.脚本文件的执行 1.存放当前文件作为脚本文件执行的参数们:[‘当前文件的绝对路径’,手动传入的参数们] 2.脚本文件执行:直接用python解释器运行该文件  print(sys.argv) # ...

  7. day9 函数练习题

    写代码,接受n个数字,求这些数字的和 def sum_func(*args): total = 0 for i in args: total+=i return total print(sum_fun ...

  8. python 全栈开发,Day9(函数的初始,返回值,传参,三元运算)

    一.函数的初始 比如python没有len()方法,如何求字符串的长度使用for循环 s = 'fdshfeigjoglfkldsja' count = 0 for i in s: count += ...

  9. python基础学习Day9 函数的初识,实参、形参、

    1.函数 def my_len(): l = [,,,,,,] count = for i in l: count += print(count) my_len() 定义的my_len()方法时,其结 ...

  10. Python day9函数部分

    函数的学习:函数对于一门编程语言来说挺重要的,尤其是c语言,是完全使用函数来编写的 1.函数的定义:逻辑结构化和过程化的一种编程方法 def squre(x): "求一个数的平方 retur ...

随机推荐

  1. tomcat运行多个项目同一个端口与不同端口的设置

    一.首先打包项目 这里采用eclipse开发工具,选中项目右击,点击Export进入 选择web下的 WAR file ,点击next 在这里可能有坑,新装的eclipse没有web文件夹 此时需要下 ...

  2. sun公司和apache使用ftpclient的区别

    最近因为使用FTP实现上传下载,因为已经有前辈使用了,照着敲了一遍(绝对没有复制粘贴啊,发誓).但是今天突然发现FTPClient还不一样,仔细看了看,一个是sun.net.ftp.FtpClient ...

  3. js中函数调用时,对参数个数和类型没有要求

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java一样对其传入参数的类型进行定,也对传入参数的个数没有要求. js函数的参数与大多数其他语 ...

  4. Traefik-v2.x快速入门

    一.概述 traefik 与 nginx 一样,是一款优秀的反向代理工具,或者叫 Edge Router.至于使用它的原因则基于以下几点 无须重启即可更新配置 自动的服务发现与负载均衡 与 docke ...

  5. C++构造函数的选择

    构造函数用来初始化类对象.构造函数有好几种,在编程时如何选择不同的构造函数呢?做个总结 一.默认构造函数 默认构造函数是在程序员没有声明任何构造函数的时,编译器为了初始化类对象自己进行的默认构造函数. ...

  6. Vue.js 多选列表(Multi-Select)组件

    搬运公众号早前文章 多选列表 (Multi-Select) 是一种将所有选项列出,并允许用户利用 Ctrl/Shift 键进行多选的 UI 元素.这是一种常见的设计元素.有时候为了节省空间,我们会将选 ...

  7. Java跨平台原理与Java虚拟机(JVM)

    Java跨平台原理(字节码文件.虚拟机) C/C++语言都直接编译成针对特定平台机器码.如果要跨平台,需要使用相应的编译器重新编译. Java源程序(.java)要先编译成与平台无关的字节码文件(.c ...

  8. AI人脸匹对

    人脸匹对 技术 调用到百度的AI接口,layui的图片上传,栅格化布局 核心代码 纯py代码运行 # encoding:utf-8 from aip import AipFace import bas ...

  9. 腾讯云发布存储一体机TStor,打通全面上云“最后一公里”

    随着云计算.大数据.人工智能等技术的发展,各行各业加速数据化转型,数据容量以前所未有的速度增长,本地存储难以适应数据的指数式增长. 另一方面,公有云因其易扩展.低成本.安全稳定的特点,逐渐被企业广泛应 ...

  10. php小结

    //函数定义常量:definedefine("PI",3.14); //使用const关键字const PII = 3; 特殊常量:双下划线开始+常量名+双下划线结束,称为魔术常量 ...