python 函数,了解一下

定义一个函数

def say():
    print('hello')

say() #  hello   执行这个函数

s = say()
print(s)  #  把函数的执行结果给 s      hello

print(say) #  <function say at 0x101bcae18>    打印函数内存地址

s = say
s()  #把函数的内存地址给s       hello



print(hex(id(a))) #0x103dfbb20  变量的地址转换为16进制

这就需要了解一下变量定义了
变量:
只是一个代号,代表某个东西,
可能是任何数据,str、list、dict、tuple、甚至是内存地址

计算机是不会骗人的
只会按照约定好的规则去执行
print 就是打印,接收到就去打印
s() 就是个方法,接收到就去执行

执行的过程就是=》拿着这个方法的内存地址=》到内存中找到该方法=》然后执行

函数的参数

def test(*agrs,**kwargs):
    print(agrs)
    print(kwargs)

test('1',name='xiaoming')

默认参数:为非必输 默认连接数据库端口
可变参数:使用*args 可以传多个值,放到tuple中
关键字参数:**keywargs 可传kv 形式的参数 转换为dict


抛砖引玉
参数传递的时候还跟位置有关,一般情况按约定好的传
传递参数的时候还可以指定变量的名字

作用域

就近原则
变量同名,从里面外面找

可以定义全局变量,慎用

返回值

可以返回任意的东西,函数内存地址也可以

装饰器

#高阶函数
def one():
    print('this is boy')


def two(f):
    print('stady...')
    return f


one  = two(one)
one()

'''
函数中可以调用其他函数
'''

# 嵌套函数
def a1():
    print('a1...')
    def a2():
        print('a2...')
    a2()  # 调用a2

a1()

def timer(f):  #传入一个函数的内存地址
    def handler(*args,**kwargs):  # 带参数
        start_time = time.time()
        f(*args,**kwargs)   #执行传入的函数
        # return f()  能够返回值
        stop_time = time.time()
        print('handler... %s' %(stop_time - start_time))
    return handler  #返回 handler 内存地址

x = timer(one)
'''
相当于在one方法上面
加@timer
@timer() 可以带参数  该参数 传递到timer 
就是在handler 外面加一层 判断输入的参数
在外层 接收参数 

'''
x() #执行handler

@timer
def decorator2():
    print('decorator2...')
decorator2()

'''
有点像java中的反射机制吧
本人拙见
操作的就是handler的地址
把该地址传给其他的方法,然后使用该地址调用handler方法

形式上,就外观看起来像注解,实现的机制下回分解
'''

猜你喜欢

转载自blog.csdn.net/java_sparrow/article/details/80716712
今日推荐