python-函数(二)

函数名的第一类对象及使用

1.当作值,赋值给变量

 def func():
    print(1)
print(func)  # 查看函数的内存地址
a = func
print(a)
a()

2.可以当作容器的元素

lst = []
dic = {}
def func():
    print(1)
def foo():
    print(2)
def index():
    print("")
lst = [func,foo]
dic = {"1":func,"2":foo}
   
def login():
    print("这是登录")
def  register():
   print("这是注册")
def index():
    print("这是主页")
msg = """
1 登录
2 注册
3 主页
"""
dic = {"1":login,"2":register,"3":index}
choose = input(msg)
if choose.isdecimal():
    if dic.get(choose):
        dic[choose]()
    else:
       print("请重新输入!")

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

 def func(a):
    a()
    print(111)
def foo():
    print(222)
def f1():
    print(333)
   func(f1)
foo()

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


def func():
   def foo():
       print(111)
    return foo
a = func()
a()
func()()  # foo()


def func():
    def foo():
        print(111)
    return foo()
print(func())

f - strings

结构:f(F)+str的形式,在字符串中想替换的位置用{}占位

注:!:,;{} 这些标点不能出现在{}这里面

 name = input("name:")
age = input("age:")
msg = "姓名:xx 年龄:xx"
msg = "姓名:%s 年龄:%s"%(name,age)
msg = f"姓名:{name}   年龄:{age}"
print(msg)
print(F"姓名:{input('name:')} 年龄:{input('age:')}")

迭代器

可迭代对象:只要具有iter()方法的对象就是可迭代对象

迭代器:具有iter()和next()两个方法才是迭代器

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

for 循环的本质

lst = [1,2,5,4,8]
l = iter(lst)
while True:
   try:
       print(l.__next__())
   except StopIteration:
       break
lst = [1,2,57,9,1,2]      
l = iter(lst)
print(next(l))
print(next(l))
print(next(l))
print(next(l))

lst = [1,2,3,5,7,5]
print(next(iter(lst)))
print(next(iter(lst)))
print(next(iter(lst)))
print(next(iter(lst)))
print(next(iter(lst)))
两者的区别:前者是只转换一个迭代器,依此打印出列表的值
          而后者是每次都要转换一次,且打印出来的值都是1

在python3中,

iter()和__iter__() 是一样的,推荐使用iter()
python3和python2的区别:
在python3中:iter()和__iter__()都有
   next()和__naet__()都有
在python2中:只有iter()和next()
  • 迭代器的优点:

    • 惰性机制————节省空间

  • 迭代器的缺点:

    • 不能直接查看元素 迭代器查看到的是一个迭代器的内存地址

    • 一次性,用完就没有了

    • 不能逆行(后退)

空间换时间:容器存储大量的元素,取值时取值时间短,但容器占用空间较大

时间换空间:迭代器就是节省了空间,但是取值时间较长

  • 迭代器是基于上一次停留的位置,进行取值

posted on 2020-02-05 20:36  we我们  阅读(150)  评论(0)    收藏  举报