python 类/函数 调用不带括号; 嵌套函数

类调用不带括号

 加括号的是类的实例化;不加括号就不是启动实例,这个应该和设置一个别名是同样的。

比如 不实例化时可直接调用内部初始变量,实例化后,变量可能被init处理,改变了初始值

class clsTest():
    y = 'you'

    def __init__(self):
        self.y = 'me'

print(clsTest)
x = clsTest
print(x)
print(x.y)
x = clsTest()
print(x.y)

<class '__main__.clsTest'>
<class '__main__.clsTest'>
you
me

Python类的实例化时,类名后不加括号是什么意思?-CSDN论坛Python类的实例化时,类名后不加括号是什么意思?https://bbs.csdn.net/topics/392156189

函数不加括号

一、不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成
二、带括号(参数或者无参),调用的是函数的执行结果,须等该函数执行完成的结果

def bracket(data):
    return data

def lls():
    # 不带括号调用的结果:<function bracket at 0x0000000004DD0B38>,a是整个函数体,是一个函数对象,不须等该函数执行完成
    a = bracket
    print(a)  # <function bracket at 0x0000000002803268>
    print(a(67)) # 67 可直接返回函数本身,并在需要的时候传值
    # 带括号调用的结果:6 ,b是函数执行后返回的值6,须等该函数执行完成的结果
    b = bracket(6)
    print(b)  # 6
lls()

嵌套函数

def outer():
    name="python"

    def inner():#outer函数内部定义的函数
        print (name)
    return inner()#返回该内部函数

def outer1():
    name="python"

    def inner():#outer函数内部定义的函数
        return name
    return inner #返回该内部函数
def out():
    print(outer())  # python None  第一个是内部打印,第二个是outer的返回
    print(outer1())  #<function outer1.<locals>.inner at 0x0000000002513378> 函数不叫括号,仅返回对象地址
    print(outer1()()) # python  调用函数

python中函数嵌套、函数作为变量以及闭包的原理 - 夏晓旭 - 博客园嵌套函数: python允许创建嵌套函数。也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变。 例子: #encoding=utf-8def outer(): name=&quhttps://www.cnblogs.com/xiaxiaoxu/p/9785687.html

函数作为变量

def add(x,y):
    return x+y

def sub(x,y):
    return x-y

def apply(func,x,y):
    return func(x,y)

def ien():
    print("apply(add,2,1):",apply(add,2,1))
    print("apply(sub,2,1):",apply(sub,2,1))

ien()

apply函数准备接收一个函数的变量,它也只是一个普通的变量而已,和其他变量一样。然后我们调用传进来的函数:“()代表着调用的操作,并且调用变量包含的值”。

在函数外,我们也能看到传递函数并没有什么特殊的语法,函数的名称只是和其他变量一样的表标识符而已。

python------函数嵌套及作用域链 - 海燕。 - 博客园1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储“变https://www.cnblogs.com/haiyan123/p/7240665.html

函数不加括号互相调用

使用:contextlib装饰器 可以自动实现 enter 和 exit的初始函数

def lj():
    with LooingGlass() as what:
        print(' alice and kitty')
        print(what)
    print(what)

    import sys
    sys.stdout.write('hello')
    print('hello')


import contextlib
@contextlib.contextmanager
def looking_glass():
    import sys
    orignal_write = sys.stdout.write

    def reverse_write(text):
        orignal_write(text[::-1])

    sys.stdout.write = reverse_write
    yield 'JABBERWOCKY'
    sys.stdout.write = orignal_write

def sdg():
    with looking_glass() as what:
        print(' alice and kitty')
        print(what)
    print(what)
lj()

 改善上述,如果报错可能会出现print无法退出。

def looking_glass():
    import sys
    orignal_write = sys.stdout.write

    def reverse_write(text):
        orignal_write(text[::-1])

    sys.stdout.write = reverse_write
    try:
        yield 'JABBERWOCKY'
    except ZeroDivisionError:
        msg = 'owerorewjfoe'
    finally:
        sys.stdout.write = orignal_write
        if msg:
            print(msg)

 

yttik dna ecila 
YKCOWREBBAJ
werr
hellohello

## print 是调用的sys.stdout.write并在之上添加了换行符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值