day11recursion/module/tireator/generator

recursion

了解

1.什么是递归函数
函数中调用函数本身的函数就是递归函数

  1. 递归的作用:循环能做的事情递归函数都能做

  2. 怎么写递归函数 f(n)
    第一步:确定临界值 - 循环结束的条件,在临界值的地方要让函数结束
    第二步:找关系 - 找当次循环和上次循环的关系;找f(n)和f(n-1)的关系
    第三步:假设函数的功能已经实现,通过f(n-1)来实现f(n)的功能

 1+2+3+4+...n
 def fun(n):
     if n == 1:
        return 1
    return fun(n-1)+n
 print(fun(100))

写⼀一个函数,可以对多个数进⾏行行不不同的运算
例如: operation('+', 1, 2, 3) ---> 求 1+2+3的结果 operation('-', 10, 9) ---> 求 10-9的结果 operation('', 2, 4, 8, 10) ---> 求 24810的结构

def opreation(char:str,*nums):
    #   对多个数进行不同的运算,通过下标用第一个元素对后边的元素依次进行运算
    num = nums[0]
    for index in range(1,len(nums)):
        if char == '+':
            return sum(nums)
        elif char == '-':
            num -= nums[index]
        elif char == '*':
            num *= nums[index]
        elif char == '':
            return ''.join(str(nums))
    return num

print(opreation('',5,3,6))

练习:求数列第n个数
1,1,2,3,5,8,13....

def sequence(n):
    if n == 1or n == 2:
        return 1
# f(n) = f(n-1) + f(n-2)
    return sequence(n-1) +sequence(n-2)
print(sequence(5))
  1. 循环能做的事情不能使用递归做!

module

'''模块'''

  1. 什么是模块
    在Python在,一个py文件就是一个模块
    系统模块(标准库) - Python系统提供的模块(使用的时候直接导入)
    random 模块 - 提供随机数
    math 模块 - 提供数学运算
    json 库 - 提供json数据相关操作
    re 模块 - 提供正则表达式相关操作
    socket 模块 - 提供Python套接字编程
    time模块 - 提供和时间相关的操作
    threading 模块 - 提供和线程相关的操作
  • 自定义模块 - 程序员自己创建的py文件
  • 自己写的模块:
  • 别人写的模块:第三方库 (需要先下载到解释器中,然后才能在代码中导入)

标准库和第三方库一般是通过模块提供变量、函数、类

  1. 怎么使用模块
    a. import 模块名 --> 直接导入指定的模块,导入后可以使用模块中所有的全局变量(包含了变量,函数和类)
    导入后通过 '模块名.变量' 来使用模块中的内容
    b. from 模块名 import 变量1 - 在程序中导入指定的模块,导入后只能使用import后面的变量
    导入后直接使用变量,不用再前面加‘模块名 .’
    from 模块名 inport * 可以直接使用里面所有的全局变量
    导入后直接使用变量,不用再前面加‘模块名 .’

  2. 导入模块的实质:
    a. 不管是使用import还是from- import,导入模块的时候都会执行模块中所有的代码
    b. Python中一个模块不会重复导入多次。因为导入的时候系统会自动检测当前模块是否导入

  3. 怎么阻止模块中的内容被其他模块执行
    写在这个if语句中的代码不会被别的模块执行
    if nama == 'main':
    将不希望其他模块执行的代码放在 if nama == 'main': 语句中
    如果希望被其他模块使用的代码就放在if nama == 'main': 语句的外面

原理:
每个模块都有一个属性 name属性,代表模块名。默认情况下它的值是py文件的文件名,
当当前模块正在被执行(直接执行)的时候,模块属性name 的值就会变成 main

  1. 重命名
    导入模块的时候可以对模块或者模块中的内容重新命名
    import 模块名 as 新模块名
    from 模块名 import 变量 as 新变量
系统模块
import random
print(random.randint(10,100))

import math
import json

import re
import socket
import time
time.localtime()
print(time.localtime())
import threading

iter

  1. 什么是迭代去(iter)
    Python 提供的容器性数据类型。
    获取迭代器中的元素的时候只能从前往后一个一个的取,而且取了之后这个元素在迭代器中就不存在了
  1. 迭代器的字面量
    迭代器没有指定格式的字面量。迭代器作为荣区,里面的元素只能通过其他序列转换,或者通过生成器生成
    迭代器中的元素可以是任何类型的数据

将字符串转换成迭代器,迭代器中的元素就是字符串中的每个字符

iter1 = iter('hello')
print(iter1)
  1. 获取元素
    迭代器中的元素只支持查 ,不支持增删改
    迭代器只能通过next函数获取单个元素,通过 for in 遍历一个一个获取所有元素;
    不管是哪种方式获取,已经获取过的元素,在迭代器中就不存在了

iter3 = iter('hello')

  1. next(迭代器) 获取迭代器中最新的数据 --> (最顶层)
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))
print(next(iter3))
print('===========')
  1. for in 遍历 通过for in 取迭代器中的元素和net效果一样,元素还是会从迭代器中取出
iter1 = iter('123456')
print(next(iter1))
for x in iter1:
    print('x:',x)

练习:看打印效果
iter2 = iter([552,'sdfs',(5221,5421)])
print(iter2)

generator

  1. 什么是生成器
    生成器就是迭代器,迭代器不一定是生成器

  2. 生成器怎么产生元素
    调用一个带有yield关键字的函数就能得到一个生成器

不带yield的函数:调用的时候会执行函数体,并且获取返回值
带yield的函数:调用的时候不会执行函数体,也不会获取返回值,而会产生一个新的生成器(函数调用表达式就是一个生成器)
这个生成器中的元素就是yield关键字后面的值


def func1():
    print('===')
    return 100

print(func1())

def func2():
    print('=====')
    return 100
    yield    #  函数体没有执行
print(func2())   #  <generator object func2 at 0x00705F30>

  1. 生成器的元素
    生成器中的元素也是通过next 或者 for in

生成器获取元素,实质就是去执行生成器对应的函数,每次都是执行到yield语句为止,并且会将yield后面的值作为获取到的元素
下次获取元素的时候会接着上次结束的位置往后执行,直到下一个yield为止...
知道函数结束。如果执行到函数结束没有遇到yield那么就会报错 异

print('============')
def func3():
    print('!!!!!!!!')
    yield 'abc',200
    print('**********')
    yield 200

gen1 = func3()   #  gen1就是一个生成器(生成器就是迭代器)
print(gen1)
print(next(gen1))
print('第一次结束')
print(next(gen1))

学号

def func4():
    num = 1
    while True:
        yield 'py1809%d' % num
        num += 1
gen1 =func4()

students = []
for _ in range(10):
    students.append(next(gen1))
print(students)

print('上了两天的课')
students.append(next(gen1))
print(students)

students.pop(2)
print(students)

students.append(next(gen1))
print(students)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 一:递归函数 实际开发的时候,能不用递归就不用。 1.什么是递归函数 在函数中调用函数本身的函数就是递归函数。 2...
    生命的怒放阅读 471评论 0 0
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,911评论 17 410
  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,798评论 0 27
  • Object Segmentation: https://arxiv.org/abs/1512.04412 Pos...
    LucasX阅读 493评论 0 0
  • 姐姐说不想再去幼儿园啦,我问为什么啊?姐姐说因为我都没有朋友了,我的朋友越来越少,她们都出去旅游了。下午接姐姐的时...
    vivian_cui阅读 254评论 0 0