Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】


Posted in Python onMarch 30, 2019

本文实例讲述了Python函数基础用法。分享给大家供大家参考,具体如下:

一、什么是命名关键字参数?

格式: 在*后面参数都是命名关键字参数。

特点:

1、约束函数的调用者必须按照Kye=value的形式传值。

2、约束函数的调用者必须用我们指定的Key名。

def auth(*args,name,pwd):
  print(name,pwd)
auth(pwd='213',name='egon')
def register(name,age):
  print(type(name),type(age))
register(123,[1,2,3])

以上输出:

egon 213
<class 'int'> <class 'list'>

二、函数的嵌套

1、函数的嵌套调用:在函数内又调用了其他函数

def max2(x,y):
  if x > y:
    return x
  else:
    return y
def max3(x,y,z):
  res1=max(x,y)
  res2=max(res1,z)
  return res2
print(max3(88,99,100))

以上输出:

100

2、函数的嵌套定义:在函数内又定义其他函数。

def func1():
  print('from func1')
  def func2(): #func2=内存地址
    print('from func2')
  print(func2) #<function func1.<locals>.func2 at 0x0000024907A098C8>
  func2()
  func2()
  func2()
func1()

以上输出:

from func2
from func2
from func2

三、函数的名称空间

1、名称空间:存放名字与值绑定关系的地方

x=888888888
def func():
  pass

2、名称空间分为三类

(1)内置名称空间:存放python解释器自带的名字,在解释器启动时就生效,解释器关闭则失效。

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

x=1
def f1():
  def f2():
    print(x)
  f2()
f1()
if 10 > 3:
  y=33333
while True:
  xxxxx=123123123

以上输出:

1

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

注意:

加载顺序:内置名称空间-------->>全局名称空间------->>>局部名称空间

查找名字:局部名称空间-------->>全局名称空间------->>>内置名称空间

def f1():
  # len=1
  def f2():
    # len=2
    print(len)
  f2()
f1()

以上输出:

global

3、作用域

全局作用域:包涵的是内置名称空间与全局名称空间的名字。

特点:

  • (1)在任何位置都能够访问的到
  • (2)该范围内的名字会伴随程序整个生命周期

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

特点:

  • (1)只在函数内使用
  • (2)调用函数时生效,调用结束失效

四、函数对象

1、函数在python中是第一类对象

(1)可以被引用

x=1
y=x
def bar():
  print('from bar')
f=bar
f()

以上输出:

from bar

(2)可以当做参数传入

x=1
def func(a):
  print(a)
func(x)

以上输出:

1

(3)可以当做函数的返回值

代码(1)

x=1
def foo():
  return x
res=foo()
print(res)

以上输出:

1

代码(2)

def bar():
  print('from bar')
def foo(func): #func=<function bar at 0x00000225AF631E18>
  return func #return <function bar at 0x00000225AF631E18>
# print(bar)
f=foo(bar) #f=<function bar at 0x00000225AF631E18>
# print(f)
f()

以上输出:

from bar

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

x=1
l=[x,]
print(l)
def get():
  print('from get')
def put():
  print('from put')
l=[get,put]
# print(l)
l[0]()

以上输出:

[1]
from get

注意:

1、 func可以被引用

f=func

2、func可以当做参数传给x

3、func还可以当做返回值

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

函数查询登录功能的引用:

def auth():
  print('请登录:')
def reigster():
  print('注册:')
def search():
  print('查看:')
def transfer():
  print('转账')
def pay():
  print('支付')
dic={
  '1':auth,
  '2':reigster,
  '3':search,
  '4':transfer,
  '5':pay
}
def interactive():
  while True:
    print('''
    1 认证
    2 注册
    3 查看
    4 转账
    5 支付
    '''
    )
    choice = input('请输入编号:').strip()
    if choice in dic:
      dic[choice]()
    else:
      print('非法操作')
interactive()

五、闭包函数

闭:指的是定义在函数内部的函数

作用域关系,在函数定义阶段就规定死了,与调用位置无关

def outter():
  x=2
  def inner():
    # x=1
    print('from inner',x)
  return inner
f=outter() #f=inner
def foo():
  x=1111111111111111111111111111
  f()
foo()

以上输出:

from inner 2

1、闭包函数:

(1)定义在函数内部的函数

(2)并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

了解:

为函数体传值的方式

方式一:将值以参数的形式的传入

利用爬虫获取网站的源代码:

import requests:
def get(url):
  response=requests.get(url)
  if response.status_code == 200:
    print(response.text)
get('https://www.baidu.com')

方式二

import requests
import time
def outter(url): #url='https://www.baidu.com'
  # 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')
python=outter('https://www.python.org')
baidu()
print('=====================>')
time.sleep(3)
baidu()

关于Python相关内容感兴趣的读者可查看本站专题:《Python函数使用技巧总结》、《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
Python里disconnect UDP套接字的方法
Apr 23 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
python2.7实现爬虫网页数据
May 25 Python
详解Python3.6的py文件打包生成exe
Jul 13 Python
Python多线程原理与用法详解
Aug 20 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
将Python代码打包成.exe可执行文件的完整步骤
May 12 Python
Python函数的参数常见分类与用法实例详解
Mar 30 #Python
Python实现定时执行任务的三种方式简单示例
Mar 30 #Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 #Python
详解python读取和输出到txt
Mar 29 #Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 #Python
详解Python函数式编程—高阶函数
Mar 29 #Python
python实现AES加密与解密
Mar 28 #Python
You might like
PHP教程 基本语法
2009/10/23 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
Js动态创建div
2008/09/25 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
使用node.js中的Buffer类处理二进制数据的方法
2016/11/26 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
Python中的包和模块实例
2014/11/22 Python
详解Python当中的字符串和编码
2015/04/25 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python 中的 else详解
2016/04/23 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
Python单链表原理与实现方法详解
2020/02/22 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
中国网上药店领导者:1药网
2017/02/16 全球购物
小学三年级学生评语
2014/04/22 职场文书
求职信的正确写法
2014/07/10 职场文书
论文答辩开场白大全
2015/05/27 职场文书
《火烧云》教学反思
2016/02/23 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
关于Vue中的options选项
2022/03/22 Vue.js