美文网首页
函数 二

函数 二

作者: 吃可爱长大鸭 | 来源:发表于2021-02-01 15:29 被阅读0次

1.函数对象

1.对函数象 这个不是新知识点  是告诉你 函数都可以怎么用
    在面向对象编程中   一切皆对象

    具体的体现
    1.函数可以被引用
    2.函数可以作为函数的参数
    3.函数可以作为函数的返回值
    4.可以被存储到容器类型中
    # 写一个购物车 具备登陆和注册,购物
def func1():
    print("run")


# a = func1()

# a = func1


def func2(func):
    func()

func2(func1)


def func3():
    return func1

f =  func3()
print(f)
print(func1)


a = 10
b = 1
c = 2


li = [a,b,c]



def func5():
    print("func5 run")


li2 = [func5]

li2[0]()



def login():
    print("登陆")
def register():
    print("注册")
def shopping():
    print("购物")

res =  input("请选择功能名称:")
if res == "login":
    login()
elif res == "register":
    register()
elif res == "shopping":
    shopping()
else:
    print("输入有误")


funcdic = {"login":login,"register":register,"shopping":shopping}

if res in funcdic:
    funcdic[res]()
else:
    print("输入有误!")

2.函数的嵌套

1.嵌套调用   在一个函数中调用了另一个函数
2.嵌套定义  在一个函数中定义了另一个函数
定义在函数内的函数 只能函数内使用  外界不能访问
嵌套定义

def func1():
    print("func1")

    def func2():
        print("func2")

    func2()

func1()


a = 100

print(a)

b = 200

def func():
    c = 1



if a  > 100:
    p = 1

while True:
    s = 10




age = 18
def func():
    # age =19
    print(age)

func()


print(len)
len = 100



def func2():
    len = 1


func2()

print(len)

3.作用域(作用范围)

    域 指的是区域 范围的的意思
    全局的名称空间和内置的名称空间 在使用上没什么区别
    局部的和全局的内置的 就区别了  局部定义的只能在局部使用
    给三个空间划分范围

    全局的和内置可以划分为同一个范围
    global 表示的全局范围 就是所谓的全局作用域

    局部的单独划分为一个范围
    local 局部作用域

    globals()
    locals()
'''
1. 什么是名称空间namespaces
    存放名字与值内存地址绑定关系的地方

2. 为何要有名称空间

3. 如何用名称空间
    内置名称空间
    全局名称空间
    局部名称空间

4. 总结结论:
    1. 查找名字的顺序是从当前位置往外查找
    2. 名称空间的嵌套关系是在函数定义阶段就固定死的,与调用位置无关

'''

# def outter():
#     x=11111111
#     def inner():
#         print(x)
#     return inner
#
#
# f=outter()
#
#
# def foo():
#     x=222222222222
#     f()
#
# foo()


l=[]
def func():
    l.append(111)
    l.append(2222)
func()
print(l)


def f1():
    y=1111
    def f2():
        x=33333
        def f3():
            nonlocal y
            y=2222

4.闭包函数

   闭包函数 也是一个函数
   与普通函数的区别
   1.定义在另一个函数中的
   2.在这个内部的函数中使用了外部的名称
age = 20
# 如下就是一个闭包函数
def fun1():
    age = 18
    def inner():
        print("hello")
        print(age)
    # 在返回这个内部的函数时 不是单纯的返回函数  还把函数中访问到的局部名称一起打包了
    # 相当于将内部函数与 访问的数据打包在一起了  闭包这个名字就是这么得来的
    return inner
f = fun1() # f 就是inner
f()

# 函数的作用域在定义时就固定了  与调用的位置没有关系



c = 1000

# 闭包函数的模板
def func2():
    a = 1
    b = 10
    def inner():
        print(a)
        print(b)
        print(c)
    return inner

5.装饰器

"""
        什么是装饰 给一个已有的对象(一个函数) 添加新的功能
        为什么要装饰 增强功能
        器 指一个工具  在python中 值得是具备某个功能的函数

        简单的说:装饰器就是 一个用于给其他函数增加功能的函数
"""
'''
1. 什么是装饰器
    装饰器指的是为被装饰对象添加新功能的工具
    装饰器本身可以是任意可调用对象
    被装饰对象本身也可以是任意可调用对象


2. 为何要用装饰器
    开放封闭原则:对修改封闭,对扩展开发

    装饰器的实现原则:
        1. 不能修改被装饰对象的源代码
        2. 不能修改被装饰对象的调用方式

    装饰器的目的:
        就是在遵循原则1和2的前提为被装饰对象添加新功能
'''
'''
# # part1
import time

# def index():
#     time.sleep(1)
#     print('welcome to index page')
#
# def wrapper():
#     start=time.time()
#     func()
#     stop=time.time()
#     print('run time is %s' %(stop -start))
#
# wrapper()


# part2
import time

# def outter(func):
#     # func=最原始那个index的内存地址
#     def wrapper(*args,**kwargs):
#         start=time.time()
#         res=func(*args,**kwargs) #最原始那个index的内存地址()
#         stop=time.time()
#         print('run time is %s' %(stop -start))
#         return res
#     return wrapper
#
# @outter #index=outter(index) #inex=outter(最原始那个index的内存地址) # index=wrapper的内存地址
# def index():
#     time.sleep(1)
#     print('welcome to index page')
#     return 1234
# #
# @outter #home=outter(home)
# def home(name):
#     time.sleep(1)
#     print('welcome %s to home page' %name)
# #
# #
# # res=index() #wrapper的内存地址()
# # print('返回值',res)
# #
# home('egon')


# 小练习
import time
from functools import wraps
def auth(func):
    @wraps(func)
    def wrapper(*args,**kwargs):
        name=input('name>>>: ').strip()
        pwd=input('pwd>>>: ').strip()
        if name == 'egon' and pwd == '123':
            print('login successfull')
            res=func(*args,**kwargs)
            return res
        else:
            print('user or pwd error')
    return wrapper


def outter(func):
    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        return res
    return wrapper

@auth
def index():
    """
    sadadsda
    :return:
    """
    time.sleep(1)
    print('welcome to index page')
    return 1234

print(index.__name__)
print(index.__doc__)
index()

相关文章

  • 2019-04-11

    二次函数 一:二次函数是一次函数加一次函数吗? 假设二次函数等于一次函数加一次函数...

  • 多元函数偏导数及计算

    二元函数是空间中的曲面一元函数是平面内的平面 一,概念及二元函数 二,二元函数偏导数 二元函数偏导数时,自变量每次...

  • 栅栏函数与迭代函数

    一, 栅栏函数 二,迭代函数

  • 12.function

    一、定义函数 函数名(){函数体} function 函数名(){函数体} 例如 二、调用函数 无参函数调用方法 ...

  • 函数二

    参数 在函数名后边的括号里写两个参数,就相当于在函数里声明了两个变量,可以有可以没有形参 在创建函数的时候,函数名...

  • 函数(二)

    0. 返回值 场景:通过某个函数,处理好数据之后,拿到处理的 结果 形式def 函数名(): 函数体 ...

  • 函数(二)

    参数 1可变,不可变 2必选 3默认 4可变 5关键字 在函数之前,定义的所有的变量都是全局变量。一旦定义了,后面...

  • 二.函数

    一.函数 抽象 抽象是数学中非常常见的概念。举个例子: 计算数列的和,比如:1 + 2 + 3 + ... + 1...

  • 函数(二)

    参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017...

  • 函数二

    1. 函数的返回值 • 返回值就是函数执行以后返回的结果 • 通过return来指定函数的返回值 • return...

网友评论

      本文标题:函数 二

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