程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

学习11:内容# 1.函数名第一类对象及使用 ***** # 2.f格式化 *** # 3.迭代器 **** # 4.递归 ****

发布于2019-08-06 11:26     阅读(604)     评论(0)     点赞(0)     收藏(3)


1.第一类对象 -- 特殊点

1.可以当做值被赋值给变量

def func():
    print(1)
print(func)
a = func
a()

2.当做元素存放在容器中

def func():
    print(1)

lst = [func,func,func]
for i in lst:
    i()

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

def func(f):
    f()

def foo():
    print("is foo")

func(foo)

4.函数名可以当做函数的返回值

def f1():
    def f2():
        print(1)
        def f3():
            print(2)
        return f2
    ret = f2()  # f2 函数的内存地址
    return ret  #
print(f1())

2.f.格式化 Python3.6版本以上才能够使用

s = f"你好{'常鑫'}"       # 填充字符串
s1 = F"你好{'常鑫'}"

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)

s1 = f"{{{{{{'常鑫吃..'}}}}}}"  # 填充大括号
print(s1)
s1 = f"{{}}"
print(s1)


s1 = f"{'{}{}{}{}{}'}"
print(s1)
s1 = f"{print(123)}"
print(s1)

def prin(a):
    print(a)

s1 = f"{prin(123)}"
prin(s1)

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)  # [1,3,4,5,6]

dic = {"key1":123,"key2":345}
s1 = f"{dic['key2']}"
print(s1)

%s,format,f

3.迭代器 迭代 : 器 : 工具

可迭代对象

list,dict,str,set,tuple -- 可迭代对象  使用灵活
方式一:
list.__iter__()
dict.__iter__()
str.__iter__()
set.__iter__()
tuple.__iter__()

方法二:
查看源码

方法三:
print(dir(list))

官方声明只要具有__iter__()方法的就是可迭代对象

可迭代对象的优点:
    1.使用灵活
    2.直接查看值
可迭代对象的缺点:
  1.消耗内存
list,tuple,str -- 索引
dict -- 键
set  -- 直接取值

迭代器: 官方声明只要具有__iter__()方法__next__()方法就是迭代器

f = open("xxxx","w")
f.__iter__()
f.__next__()

lst = [1,2,3,4,6]
new_list = lst.__iter__()  #将可迭代对象转换成迭代器

new_list.__iter__()
new_list.__next__()

s = "123434"
new_s = s.__iter__()       #将可迭代对象转换成迭代器
print(new_s)
new_s.__iter__()
new_s.__next__()


new_s = s.__iter__()       #将可迭代对象转换成迭代器
print(new_s)
new_s.__iter__()
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
s = "12343"               # 更改版for的本质
s = [1,2,3,4,5,7]
count = len(s)
new_s = s.__iter__()
while count:
    print(new_s.__next__())
    count -= 1


print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
print(new_s.__next__())
s = "12345"
new_s = s.__iter__()
while True:
    try:
        print(new_s.__next__())   # for真实本质
    except StopIteration:
        break


except Exception:
    print("我是万能的!")
    break

总结 迭代器什么时候使用:当容器中数据量较多的时候使用迭代器

总结:
    可迭代对象:
        优点:使用灵活,可以直接查看值
        缺点:占内存,不能迭代取值

    迭代器:
        优点:节省内存,惰性机制
        缺点:使用不灵活,操作比较繁琐,不能直接查看元素
迭代器的特性:
    1.一次性的(用完就没有了)
    2.不能逆行(不能后退)
    3.惰性机制(节省内存)
什么是可迭代对象:
    具有很多私有方法,具有__iter__()方法的就是一个可迭代对象

什么是迭代器:
    具有__iter__()和__next__()方法的就是迭代器

迭代器什么时候使用:当容器中数据量较多的时候使用迭代器

4.递归

满足两个条件才是有效递归

1.自己调用自己 (不断调用自己本身) -- 死递归
2.有明确的终止条件

递:一直执行直到碰到结束条件
归:从结束条件开始往回退

官方声明: 最大层次1000,实际测试 998/997

原理

def func():
    print(123)
    func()
func()

第一例:

def age(n): # 1,2,3
    if n == 3:
        return "猜对了"
    else:
        age(n+1)
print(age(1))

def age2(n):
    if n == 3:
        return "猜对了"

def age1(n):
    if n == 3:
        return "猜对了"
    else:
        age2(n+1)

def age(n):
    if n == 3:
        return "猜对了"
    else:
        age1(n+1)
age(1)

第二例:

1.宝元  18-2-2-2
2.太白  18-2-2
3.wusir 18-2
4.alex  18

def age(n):
    if n == 4:
        return 18
    else:
        return age(n+1)-2
print(age(1))


def age4(n):
    if n == 4:
        return 18
def age3(n):
    if n == 4: # 问的是不是第四个了
        return 18
    else:
        return age4(n+1)-2
def age2(n):
    if n == 4:  # 问的是不是第四个了
        return 18
    else:
        return age3(n+1)-2
def age1(n):
    if n == 4: # 问的是不是第四个了
        return 18
    else:
        return age2(n+1)-2
print(age1(1))


所属网站分类: 技术文章 > 博客

作者:伤心太平洋

链接:https://www.pythonheidong.com/blog/article/8341/cab573ba26c601b63d22/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

0 0
收藏该文
已收藏

评论内容:(最多支持255个字符)