1,函数名的作用
例子
def func():
print(666)
函数名指向的是函数的内存地址
print(func) # <function func at 0x0000019F5518AB88>
函数名就是变量
def func():
print(666)
f = func
f1 = f
f2 = f1
f2()
func()
f()
f1()
f2()
def func1():
print('in func1')
def func2():
print('in func2')
func2 = func1
func1() # in func1
print(func1, func2)
函数名可以作为容器类的元素
def func1():
print('in func1')
def func2():
print('in func2')
def func3():
print('in func3')
l1 = [func1, func2, func3]
for i in l1:
i()
函数名可以作为函数的参数
def func(a):
print(a)
print('in func')
b = 3
func(b)
def func():
print('in func')
def func1(x):
x()
print('in func1')
func1(func)
函数名可以作为函数的返回值
def sum():
return 5 + 9
print(sum()) # 14
2,格式化输出
%s 和format
name = '太白'
age = 20
msg1 = '我叫%s,年%s岁' % (name, age)
msg2 = '我叫{},今年{}岁'.format(name, age)
print(msg1)
print(msg2)
新特性:格式化输出 3.6版本之后的
name = '太白'
age = 18
msg = f'我叫{name},今年{age}岁'
print(msg)
可以加表达式
dic = {'name': 'alex', 'age': 22}
dic = {'name': 'alex', 'age': 22}
msg = f'我叫{dic["name"]},今年{dic["age"]}'
print(msg)
count = 7
print(f'最终结果是:{count**2}') # 最终结果是:49
name = 'barry'
msg = f'我的名字是{name.upper()}'
print(msg) # 我的名字是BARRY
! , : {} ; 这些不能出现在{}这里面
优点:
1,结构更加简化。
2,可以结合表达式,函数进行使用。
3,效率提升很多。
3,迭代器
可迭代对象
字面意思:对象?python中一切皆对象。一个实实在在存在的值,对象。
可迭代:更新迭代循环的,重复的一个过程,更新迭代每次都有新的内容,
可以进行循环更新的一个实实在在的值。
-
专业角度:可迭代对象?内部含有‘iter’方法的对象,可迭代对象.
目前学过的可迭代对象? str list tuple dict set range 文件的句柄
-
获取对象的所有方法:并且以字符创的形式表现:dir()
判断一个对象是否可迭代对象
si = 'sdrthsfgnsf'
print('__iter__' in dir(s1))
迭代器
内部含有'__iter__'方法并且含有'__next__'方法的对象 就是迭代器 可以判断是否是迭代器:('__iter__' in dir(对象)) and ('__next__' in dir(对象))
# 查看内部方法
print(dir(print))
with open('文件1',encoding='utf-8',mode='w') as f:
print(('__iter__' in dir(f)) and ('__next__' in dir(f))) # true f 是一个迭代器
s = 'sdfhdfshdfs'
print(('__iter__' in dir(s)) and ('__next__' in dir(s))) # False
字符串不是迭代器
可迭代对象是不可以一个一个取值的,我们看到的只是for循环对它进行了转化,转化成了迭代器,才可以一个一个进行取值的
可迭代对象可以转化成迭代器,用iter()函数进行转化
s1 = 'shertjhrtjhrtfg'
obj = iter(s1)
print(obj) # <str_iterator object at 0x000001DC28DA30C8>
print(('__iter__' in dir(obj)) and ('__next__' in dir(obj))) # True
# 取值
print(obj.__next__()) # 或 print(next(obj))
print(next(obj)) # s 运行一次取一个值
print(next(obj)) # h
print(next(obj)) # e
l1 = [11, 22, 33, 44, 55, 66]
obj = iter(l1) # 对列表进行一个操作,形成一个迭代器
print("__iter__" in dir(obj) and "__next__" in dir(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
'''
以上操作就相当于:
for i in l1:
print(i)
'''
# 可迭代对象
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 1133, 1562]
count = 0
for i in l1:
if count == 4:
break
else:
print(i)
count += 1
迭代器的特点:不回头
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 1133, 1562]
obj = iter(l1)
for i in range(4):
print(next(obj))
print('第一次')
#
for i in range(6): # 这次从55开始执行
print(next(obj))
print('第二次')
# 利用while循环模拟for循环对可迭代对象进行取值的机制 *****
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 1133, 1562]
obj = iter(l1)
while 1:
try:
print(next(obj))
except StopIteration:
break
更多内容可以查看自己学python的过程,简单笔记。-CSDN博客
更多内容可以查看自己学python的过程,简单笔记。-CSDN博客
更多内容可以查看自己学python的过程,简单笔记。-CSDN博客