python函数名第一类方法、f-string格式化、迭代器及递归函数

枫铃3年前 (2021-09-30)Python183

函数第一类方法

函数名可以赋值给其他变量

def func():
    print(1)
a = func
a()
# 结果:1

函数名可以当做容器类的元素

def func1():
    print(1)
def func2():
    print(2)
def func3():
    print(3)
for i in [func1,func2,func3]:
    i()
# 结果:
1  
2  
3

函数名可以当做函数的参数

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def func():
    print(1)
def func1(f):
    print('我是传递过来的函数')
    f()
func1(func)   
# 结果:
'我是传递过来的函数'
1

函数名可以作为函数的返回值

def func():
    def foo():
        a = 1
        print(a)
    return foo
ret = fun()
ret()
# 结果:
1

f-string字符串格式化

支持:F,变量,数字计算,表达式,函数,列表取值,字典取值

填充字符串

s = f"你好{'赛丽亚'}"       # 填充字符串
s1 = F"你好{'赛丽亚'}"
print(s)
print(s1)
# 结果:
你好赛丽亚
你好赛丽亚

填充变量

s = '世界'
s1 = f"你还是挺好的{s}" # 填充变量
print(s1)

填充计算公式

s1 = f"{35+15}"         # 填充计算公式
print(s1)

填充表达式

a = 10
b = 20
s1 = f"{a if a>b else b}"  # 填充表达式
print(s1)

填充函数

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def foo():
    def func():
        a = 1
        return a
    return func()
s1 = f"{foo()}"        # 填充函数
print(s1)

填充列表

lst = [1,3,4,5,6]
s1 = f"{lst[0:5]}"      #填充列表
print(s1)  

填充字典

dic = {"key1":123,"key2":345}
s1 = f"{dic['key2']}"     #填充字典
print(s1)
print(f"{{73}}")  # {73}
print(f"{{{73}}}")  # {73}
print(f"{{{{73}}}}")  # {{73}}
m = 21
# ! , : { } ;这些标点不能出现在{} 这里面。
# print(f'{;12}')  # 报错
# 所以使用lambda 表达式会出现一些问题。
# 解决方式:可将lambda嵌套在圆括号里面解决此问题。
x = 5
print(f'{(lambda x: x*2) (x)}')  # 10

迭代器

可迭代对象

在python中,但凡内部含有iter方法的对象,都是可迭代对象。

a = 'alex'
print(dir(a))
# 结果:
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

简单的方法:

a = 'alex'
print('__iter__' in dir(a))
# 结果:
True

我们平时用到的list 、str、tuple、dict、set都是可迭代对象

可迭代对象的优点:

  • 方便取值,比较直观
  • 占用内存

迭代器

迭代器的定义:

从字面意思来看,迭代器就是可以迭代取值的工具。

从专业角度来说:迭代器是这样的对象:实现了无参数的__next__方法,返回序列中的下一个元素,如果没有元素了,那么抛出StopIteration异常.python中的迭代器还实现了__iter__方法,因此迭代器也可以迭代。

我们常见数据类型list、str、dict、tuple、set及文件句柄,只有文件句柄是迭代器

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
o1 = 'alex'
o2 = [1, 2, 3]
o3 = (1, 2, 3)
o4 = {'name': '李白','age': 18}
o5 = {1, 2, 3}
f = open('file',encoding='utf-8', mode='w')
print('__iter__' in dir(o1))  # True
print('__iter__' in dir(o2))  # True
print('__iter__' in dir(o3))  # True
print('__iter__' in dir(o4))  # True
print('__iter__' in dir(o5))  # True
print('__iter__' in dir(f))  # True

print('__next__' in dir(o1))  # False
print('__next__' in dir(o2))  # False
print('__next__' in dir(o3))  # False
print('__next__' in dir(o4))  # False
print('__next__' in dir(o5))  # False
print('__next__' in dir(f))  # True
f.close()

迭代对象转化为迭代器:

lst = list(range(6))
lst1 = lst.__iter__()
print(lst1)
# 结果:<list_iterator object at 0x000001C68FCA87B8>

lst = list(range(6))
lst1 = iter(lst)
print(lst1)
# 结果:<list_iterator object at 0x00000211B7048780>

迭代器取值(使用__next__方法):

lst = list(range(3))
lst1 = lst.__iter__()
ret = lst1.__next__()
print(ret)    # 0 
ret = lst1.__next__()
print(ret)    # 1
ret = lst1.__next__()
print(ret)    # 2
ret = lst1.__next__()
print(ret)    # StopIteration
# 迭代器利用next取值:一个next取对应的一个值,如果迭代器里面的值取完了,还要next,那么就报StopIteration的错误。

while模拟for的内部循环机制:

lst = list(range(5))
count = len(lst)
lst_s = lst.__iter__()
while count:
    print(lst_s.__next__())
    count -= 1   
# 郭氏原理

lst = list(range(5))
lst_s = lst.__iter__()
while True:
    try:
        print(lst_s.__next__())
    except StopIteration:
        print('迭代终止')

递归函数

有效递归的两个条件:

  • 不断的调用自己本身
  • 有明确的终止条件
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def age(n):
    if n == 1:
        return 18
    else:
        return age(n-1)+2
print(age(3))

在这里插入图片描述

相关文章

python中sorted()函数的用法

一. 定义 sorted()函数对所有可迭代的对象进行排序操作 二. 语法 sorted(iterable [, key[, reverse]]])...

Python中的负索引是什么?

Python中的序列索引可以是正也可以是负。 如果是正索引,0是序列中的第一个索引,1是第二个索引。 如果是负索引࿰...

python自带的Mock模块使用

一、mock是什么? 英译中含义有:虚假的; 不诚实的; 模仿的; 模拟的 这个意思这个库的主要功能就是模拟一些事务官方解释&#...

python中Dict与OrderedDict

使用dict时ÿ...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。