本文目录:

一、命名关键字参数

二、函数对象

三、函数的嵌套

四、名称空间与作用域

五、闭包函数

一、命名关键字参数

# 命名关键字参数: 在定义函数时,*与**之间参数称之为命名关键字参数
# 特点:
# 在调用函数时,命名关键字参数必须按照key=value的形式传值
# def func(x,*,y=1,z):
# print(x)
# print(y)
# print(z)
#
# func(1,z=2) # 函数中所有形参排列顺序
def func(a,b=2,*args,c,**kwargs):
print(a)
print(b)
print(args)
print(c)
print(kwargs)

二、函数对象

# 函数是第一类对象: 指的是函数的内存地址可以像一个变量值一样去使用
def foo(): #foo=函数的内地址
print('from foo') # 1. 变量值可以被引用
# x=1 #foo=函数的内地址
# y=x f=foo
# print(f)
# f() #2. 变量值可以当作参数传给另外一个函数
# def bar(x):
# print(x)
# x()
#
# x=11111 #foo=函数的内存地址
# # bar(x)
# bar(foo) #3. 变量值可以当作函数的返回值
# def func(x):
# return x
#
# f=func(foo)
# print(f) #4. 变量值可以当作容器类型的元素
# l=[foo,]
# print(l)
# l[0]() # dic={'1':foo}
# print(dic)
# dic['1']()
def register():
print('注册....') def login():
print('登录....') def pay():
print('支付....') def transfer():
print('转账....') func_dic={
'':register,
'':login,
'':pay,
'':transfer
} # func_dic['1']() while True:
print("""
0 退出
1 注册
2 登录
3 支付
4 转账
""")
choice=input('请输入你的操作: ').strip()
if choice == '':break if choice not in func_dic:
print('输错的指令不存在')
continue func_dic[choice]()

简易购物车实例

三、函数的嵌套

# 函数的嵌套调用:在一个函数内部又调用其他函数
# 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)) # 函数的嵌套定义: 在函数内又定义了其他函数
# def func():
# def foo():
# print('from foo')
# # print(foo)
# foo()
# x=1
# print(x) # func() from math import pi def circle(radius,action):
def cal_perimeter():
return 2 * pi * radius def cal_area():
return pi * (radius ** 2) if action == 1:
res=cal_perimeter()
elif action == 2:
res=cal_area()
return res res=circle(10,1)
print(res)

四、名称空间与作用域

1.名称空间相关

1. 名称空间Namespaces:指的就是存放名字与值内存地址绑定关系的地方(内存空间)
x=1 2. 名称空间分为三大类
内置名称空间: 存放的是python解释器自带的名字
产生:python解释器的启动则产生
销毁:python解释器关闭则销毁
'''
全局名称空间: 在顶级定义的名字
x=1
if True:
y=2
while True:
while True:
while True:
z=3
def func():
pass 产生:执行python程序时产生
销毁:python程序执行完毕后则销毁 局部名称空间: 在函数内定义的名字
def foo():
m=100 foo()
产生: 在函数调用时临时产生
销毁: 在函数调用完毕后则销毁 三种名称空间的产生的先后顺序: 内置->全局->局部
查找名字的顺序:从当前位置往外一层一层查找
如果当前在局部名称空间: 局部->全局->内置
如果当前在全局名称空间: 全局->内置 # len=111
# def foo():
# # len=222
# print(len)
# len=111
# foo() # x=0
def f1():
# x=1
def f2():
# x=2
def f3():
# x=3
print(x)
f3()
f2()
f1() def foo1():
def foo2():
def foo3():
print(x) '''

2.作用域:指的是作用范围

# 全局作用域:包含内置与全局名称空间的名字
# 特点:全局存活,全局有效
# 局部作用域:包含局部名称空间的名字
# 特点:临时存活,局部有效
# !!!作用域关系是在函数定义阶段就已经固定死了,与调用位置无关
# 示范一:
# def f1():
# print(xxx)
# xxx=111
#
# def f2():
# xxx=222
# f1()
#
# f2() # 示范二:
xxx=111
def f1():
print(xxx)
# xxx=222
yyy=222
print(yyy) f1()

五、闭包函数

# 闭包函数:
# 闭:封闭,指的是该函数是定义一个函数内部的函数
# 包:该内部函数包含对外层函数名字的引用
# def outter():
# x=1
# def inner():
# print('from inner',x)
# return inner
#
#
# f=outter()
#
# def foo():
# # print(f)
# x=111111111111111111111111111111111111
# f()
# foo() # 为函数体传值的两种方式:
# def foo():
# print('hello %s' %name) # 方式一:直接以参数的形式传入
# def foo(name):
# print('hello %s' %name)
#
# foo('egon')
# foo('egon')
# foo('egon') # 方式二:闭包函数
# def outter(name):
# # name='egon'
# def foo():
# print('hello %s' %name)
# return foo
#
# f=outter('egon')
# # print(f)
# f()
# f()
# f()
#
# f1=outter('alex')
# f1()
# f1()
# f1() # pip3 install requests
import requests # 问题
# def get():
# response=requests.get(url)
# if response.status_code == 200:
# print(response.text) # 解决方案一:
# def get(url):
# response=requests.get(url)
# if response.status_code == 200:
# print(response.text)
#
# get('https://www.baidu.com')
# get('https://www.baidu.com')
# get('https://www.baidu.com') # 解决方案二: def outter(url):
# url='https://www.baidu.com'
def get():
response=requests.get(url)
if response.status_code == 200:
print(response.text)
return get baidu=outter('https://www.baidu.com')
cnblogs=outter('https://www.cnblogs.com') baidu()
baidu()
cnblogs()

python函数:函数参数、对象、嵌套、闭包与名称空间、作用域的更多相关文章

  1. 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归

    孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...

  2. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域

    一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...

  3. Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数

    本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...

  4. 周末学习笔记——day01(函数,函数对象,嵌套调用,名称空间,作用域,闭包,装饰器)

    一,复习 字符编码 文件头:py2—ASCII,py3—UTF-8 三种字符串:u' ' b ' ' r ' ' u' ' .endcode(' utf-8 ') b' '.deconde(' utf ...

  5. Python记录9:函数4:名称空间作用域+闭包函数+装饰器

    ''' 一: 名称空间namespaces     名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种     内置名称空间:         1. 特点: 存放是python解释器自 ...

  6. python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套

     复习   1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用:     # 字符串的比较#  -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...

  7. python学习Day12 函数的默认值、三元表达式、函数对象(函数名)的应用场景、名称空间与作用域

    复习 1.字符串的比较: -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 2. 函数的参数 : 1)实参与形参:       -- 形参:在函数定义时()中出现的参数       ...

  8. JS函数的参数对象arguments在严格模式下的限制

    在JS中,传入的函数的参数个数可以与定义函数的个数不一致,那么对于传入的实参的引用,则是arguments对象.然而改对象在严格模式和非严格模式下是由区分的: 1 在严格模式下arguments作为了 ...

  9. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

随机推荐

  1. Array.prototype.filter()

    1. filter() 方法:创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素 ——filter() 不会对空数组进行检测 ——filter() 不会改变原始数组 2. 语法: ...

  2. STS如何将一个文件夹设置缺省的创建路径(build path)

    STS中的build path是一种缺省的路径,相当于windows的环境变量中的path,利用它可以将jsp等文件放入其中,程序只需要文件名就可以找到它. (1)在Package Explorer中 ...

  3. 关于安装Git后,项目目录右键菜单无Git Bash Here命令的选项

    修改注册表配置 1.第一步,window + R,输入regedit回车进入注册表 2.依次进入HKEY_CLASSES_ROOT --> Directory -->Background ...

  4. Linux文件属性之时间戳及文件名知识详解

    ls  -lhi 7.8.9三列是时间(默认是修改时间) modify    修改时间 -----mtime     一般是修改文件内容 change   改变时间----ctime      文件的 ...

  5. IDEA安装Git

    1.下载Git 官方地址为:https://git-scm.com/download/win 2.下载完之后,双击安装 3.选择安装目录 4.选择组件 5.开始菜单目录名设置 6.选择使用命令行环境 ...

  6. 小记--------spark的两种提交模式

    spark的两种提交模式:yarn-cluster . yarn-client 图解

  7. SpringBoot起飞系列-自定义starter(十)

    一.前言 到现在,我们可以看出来,如果我们想用一些功能,基本上都是通过添加spring-boot-starter的方式来使用的,因为各种各样的功能都被封装成了starter,然后把相关服务注入到容器中 ...

  8. 【python tkinter】对于窗口存在的认识

    今天写了messagebox(信息提示框) 和 inputbox(输入框). 对于  [窗口] 有了新的认识... 发现一个奇怪的事情(虽然原因很简单啦······) def msg_box(titl ...

  9. python-open函数

    open函数,该函数用于文件处理 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式 ...

  10. 深入理解Redux之手写React-Redux

    React-Redux主要由两部分组成,一是Provider(提供者),顾名思义作用就是提供状态数据. 另一部分是connect函数,它的作用是把UI组件和状态数据“连接”起来,实现了Model和Vi ...