美文网首页
Python-part9-函数2

Python-part9-函数2

作者: 船长captian | 来源:发表于2018-08-14 17:01 被阅读0次

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

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)

相关文章

  • Python-part9-函数2

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

  • Day9总结

    1.回顾昨天学习知识: 1)字典2)集合 2.函数 1)函数语法 def 函数名():函数体 2)函数的调用 函数...

  • 廖雪峰 | 3.0 函数

    1 调用函数 2 定义函数 3 函数的参数 4 递归函数 1 调用函数 1,使用函数时,需要知道函数的名称和参数2...

  • 2019-01-05 day10function2 函数作为函数

    05 函数的参数是函数 3. 变量作为函数的实参 函数1作为函数2的实参 -- 函数2就是一个高阶函数 非常重要...

  • 函数2

    1.函数的返回值 在python中,每个函数都有返回值。当函数体中存在return语句的时候,返回值为return...

  • 函数2

    1.异常 异常时干扰程序的正常流程的非正常事故,当事故被查出时,会抛出一个异常 2.给类型添加方法 JS允许给基...

  • 函数2

    今天开始了函数的正式学习,相对引用和绝对引用,今天的学习时间明显要比过往长了很多,依然是希望自己能够坚持下去,好好...

  • 2、函数

    https://www.liaoxuefeng.com/wiki/1016959663602400/1017105...

  • 函数2

    试试

  • 07 C函数

    1、why函数? 2、函数进阶 3、递归函数

网友评论

      本文标题:Python-part9-函数2

      本文链接:https://www.haomeiwen.com/subject/tdpvbftx.html