python 类/函数 调用不带括号; 嵌套函数
类调用不带括号加括号的是类的实例化;不加括号就不是启动实例,这个应该和设置一个别名是同样的。比如 不实例化时可直接调用内部初始变量,实例化后,变量可能被init处理,改变了初始值class clsTest():y = 'you'def __init__(self):self.y = 'me'print(clsTest)x = clsTestprint(x)print(x.y)x = clsTest
类调用不带括号
加括号的是类的实例化;不加括号就不是启动实例,这个应该和设置一个别名是同样的。
比如 不实例化时可直接调用内部初始变量,实例化后,变量可能被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 调用函数
函数作为变量
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函数准备接收一个函数的变量,它也只是一个普通的变量而已,和其他变量一样。然后我们调用传进来的函数:“()代表着调用的操作,并且调用变量包含的值”。
在函数外,我们也能看到传递函数并没有什么特殊的语法,函数的名称只是和其他变量一样的表标识符而已。
函数不加括号互相调用
使用: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并在之上添加了换行符
更多推荐
所有评论(0)