Python-part9-函数2

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

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

  1. 可以被引用
x=age
print(x,age)
f=func
print(f)
f()
  1. 可以当作参数传给另外一个函数
def bar(x):
print(x)

bar(age)
bar(func)
  1. 可以当作一个函数的返回值
def bar(x):
    return x

res=bar(age)
print(res)

res=bar(func)
print(res)
  1. 可以当作容器类型的元素
l=[age,func,func()]
print(l)


def login():
    print('login')

def register():
    print('register')

def shopping():
    print('shopping')

def pay():
    print('pay')



def transfer():
    print('transfer')

func_dic={
    '1':login,
    '2':register,
    '3':shopping,
    '4':pay,
    '5':transfer
}
print(func_dic)

msg="""
0 退出
1 登陆
2 注册
3 购物
4 支付
5 转账
"""

while True:
    print(msg)
    choice=input('请输入您的操作: ').strip()
    if choice == '0':break
    if choice == '1':
        login()
    elif choice == '2':
        register()
    elif choice == '3':
        shopping()
    elif choice == '4':
        pay()
    else:
        print('输入错误指令,请重新输入')
    if choice in func_dic:
        func_dic[choice]()
    else:
       print('输入错误指令,请重新输入')

函数嵌套分为两大类

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

def bar():
    print('from bar')

def foo():
    print('from foo')
    bar()

foo()

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 outter():
    x=1
    print('from outter')
    def inner():
           print('from inner')
     print(x)
     print(inner)
    inner()

 outter()
 inner

outter()

def f1():
    print('from f1')
    def f2():
        print('from f2')
        def f3():
            print('from f3')
        f3()
    f2()

f1()

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 什么是名称空间namespace

名称空间就是用来存放名字与值内存地址绑定关系的地方(内存空间)

age=18
但凡查找值一定要通过名字,访问名字必需去查找名称空间

2 名称空间分为三大类

内置名称空间:存放的是python解释器自带的名字
例如:
len
max
print

全局名称空间:存放的是文件级别的名字
例如:以下名字中x\y\z\b\foo都会存放于全局名称空间中

        x=1
        y=2
        if x == 1:
            z=3

        while True:
            b=4
            break

        def foo():
            m=3

局部名称空间:在函数内定义的名字
例如:
foo内的m这个名字一定是存放于一个局部名称空间中

生命周期:
内置名称空间:在解释器启动时则生效,解释器关闭则失效
全局名称空间:在解释器解释执行python文件时则生效,文件执行完毕后则失效
局部名称空间:只在调用函数时临时产生该函数的局部名称空间,改函数调用完毕则失效

加载顺序:
内置->全局->局部

查找名字的顺序:
基于当前所在位置往上查找
假设当前站在局部,查找顺序:局部->全局->内置
假设当前站在全局,查找顺序:全局->内置

案列一:

# len=111

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

foo()
print('站在全局找len: ',len)


x=111

def f1():
    x=222
    def f2():
        def f3():
            # x=444
            print(x)
        x=333
        f3()
    f2()
f1()

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

案列二:

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

f=outer()
# print(f)

x=222
f()

案列三:

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

f=outer()

# x=222
def func():
    x=333
    f()

x=444

func()

案列四:

x=111
def outer():
    def inner():
        print('from inner',x) # x是来自于当前层的名字
        x=2222222222
    return inner

f=outer()

f()

作用域:

域指的是范围,作用域指的就是作用的范围,分为两种
全局作用域:包含的是内置名称空间与全局名称空间中的名字
特点:全局有效,全局存活

局部作用域:包含的是局部名称空间中的名字
特点:局部有效,临时存活

x=1

def foo():
    y=2
    print(x)

def bar():
    print(x)

foo()
bar()


global,nonlocal

x=1
def foo():
   x=2

foo()
print(x)


l=[]
def foo():
    l.append(1)
    # l=33333
foo()
print(l)

global:在局部声明一个名字是来自于全局作用域的,可以用来在局部修改全局的不可变类型

x=1
def foo():
    global x
    x=2

foo()
print(x)

nonlocal:声明一个名字是来自于当前层外一层作用域的,可以用来在局部修改外层函数的不可变类型

x=0
def f1():
   x=111
    def f2():
        # global x
        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 为何要用闭包函数

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

为函数体传值的方式一:参数

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()
f()
f()

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(len(response.text))

get('https://www.baidu.com')
get('https://www.baidu.com')
get('https://www.baidu.com')
get('https://www.tmall.com')
get('https://www.tmall.com')

url1='https://www.baidu.com'
url2='https://www.tmall.com'

get(url1)
get(url1)
get(url1)

get(url2)
get(url2)
get(url2)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容