美文网首页
day10总结

day10总结

作者: 9527神经 | 来源:发表于2018-11-19 17:51 被阅读0次

1.变量的作用域
变量在程序中能够使用的范围

2.全局变量
a.声明在函数或者类的外部的变量都是全局变量
b.全局变量是从声明开始到整个py文件结束,任何位置都可以使用(作用域:从声明开始到文件结束)

3.局部变量
a.声明在函数或者类的里面的变量都是局部变量
b.局部变量是从声明开始到函数结束,任何位置都可以使用(作用域:从声明开始到函数结束)
===========1.全局变量===========
x和y是全局变量

for x in range(10):
    y = 20
    print(x)

print(x, y)

if True:
    # b是全局变量
    b = 20

print(b)


def func1():
    print('函数中:', a)
    print('函数中', x, y)


func1()

============2.局部变量=============

def func2(num1, num2):
    print(num1, num2)
    aa = 11
    print(aa)
    for xx in range(5):
        print(xx)
    print(xx)

============3.global的使用==========
global关键字只能在函数中使用,作用是在函数中声明一个全局变量

语法:
global 变量名
变量名 = 值

def test1():
    # 声明一个局部变量a1
    # a1 = 200
    # print(a1)

    global a1
    a1 = 200
    print(a1)

    # 在函数中声明全局变量b1
    global b1
    b1 = 300


test1()
print(a1, b1)

=============4.nonlocal的使用==============
nonlocal关键字只能在函数中使用
当需要在局部的局部中修改局部变量的值,就使用nonlocal

语法:
nonlocal 变量名
变量名 = 值

def func1():
    # 声明一个局部变量a2
    a2 = 'abc'

    # python中函数可以声明函数
    def func11():
        nonlocal a2
        a2 = 'python'
        print('func11-a2:', a2)
        # a3的作用域在func11中
        a3 = 111
    func11()
    print('func1-a2:', a2)

python中,声明函数其实就是声明一个类型是function的变量。函数名就是变量名

函数名作为变量除了可以用来调用函数获取返回值以外,普通变量能做的它都能做

声明类型是function类型的变量d
def d(x):
    def e():
        print('abc')
    e()
    return x*x


print(type(d))
d(10)

声明一个函数变量func11

def func11():
    print('我是函数')

  使用函数变量func11给ff赋值
ff = func11
将ff当成函数来用
ff()

3.作为函数的参数
将函数1作为实参,传递给函数2;这儿的函数2就是一个高阶函数(实参高阶函数)

def test(x):
    x = func3
    print('test:', x)
    if not isinstance(x, int):
        x()

3.1 sort函数
def sort(key=None, reverse=False)

key - 确定排序的时候以什么值为标准来排序(默认情况下,以列表的元素的大小为标准来排序);
需要传一个函数,函数需要一个参数和一个返回值。这儿的参数是列表的元素
reverse - 是否降序排序, 需要传一个bool值


def yt_sort(list1, key=None):
    # list1 = my_list2; key = get_age
    if key == None:
        # 直接对列表元素进行排序
        for index in range(len(list1)):
            for index2 in range(index+1, len(list1)):
                current = list1[index]
                behind = list1[index2]
                if behind < current:
                    list1[index], list1[index2] = list1[index2], list1[index]
    else:
        for index in range(len(list1)):
            for index2 in range(index+1, len(list1)):
                current = key(list1[index])
                behind = key(list1[index2])
                if behind < current:
                    list1[index], list1[index2] = list1[index2], list1[index]


my_list = [1, 34, 20, 89, 8]
yt_sort(my_list)

4.变量作为函数的返回值
返回值是函数的函数,也叫高阶函数(返回值高阶函数)

def test2(n):
    sum1 = 1
    for x in range(1, n+1):
        sum1 *= x
    return sum1


re = test2(5) + 10
print(re)

def get_operation(char):
char = '+'

根据不同的符号返回不同的功能(函数功能的描述)
:param char: 运算符符号
:return: 不同运算符对应的功能的函数

if char == '+':
    求和的功能
    def sum(*args, **kwargs):
        # args = (10,20,30)
        """求多个数的和"""
        sum1 = 0
        for item1 in args:
            sum1 += item1
        for key in kwargs:
            sum1 += kwargs[key]
        print('yt')
        return sum1

    return sum
elif char == '*':
    def mul(*args, **kwargs):
        sum1 = 1
        for item1 in args:
            sum1 *= item1
        for key in kwargs:
            sum1 *= kwargs[key]
        return sum1

    return mul
elif char == '-':
    def diff(*args):
        """求多个数的差"""
        # (10, 20, 30)
        sum1 = args[0]
        for index in range(1, len(args)):
            sum1 -= args[index]
        return sum1

    return diff
else:
    print('暂时不支持这个运算符')
    return None

1.什么是迭代器(iter)
迭代器是python中的容器类的数据类型,可以同时存储多个数据。
取迭代器中的数据只能一个一个的取,而且取出来的数据,在迭代器就不存在了

2.迭代器中数据的来源
a.将其他序列转换成迭代器
b.使用生成式、生成器去产生数据

1.将数据转换成迭代器
所有的序列都可以转换成迭代器
将字符串转换成迭代器

iter1 = iter('abcd')
print(iter1)

iter2 = iter([1, 10, 100, 1000])
print(iter2)

iter3 = iter({'name': '小明', 'age': 20})
print(iter3)

2.获取迭代器中的元素
next(迭代器) / 迭代器.next() - 取出迭代器中第一个元素(已经取出来的元素再也回不到迭代器中了)

print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))

print(next(iter1)) # 当迭代器是空的时候,使用next获取元素,会出现StopIteration异常

print(iter2.__next__())
print(next(iter2))

b.通过for循环取出迭代器中每个元素

for x in iter2:
    print('==:', x)

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

调用带有yield关键字的函数,拿到的结果就是一个生成器。生成器中元素就是yield关键字后边的值

2.生成器怎么产生数据
只要函数中有yield关键字,调用函数不会再执行函数体获取返回值,而是创建一个生成器。
当获取生成器的元素的时候,才会执行函数的函数体,执行到yield语句为止,并且将yield后面的值作为结果返回;
并且保存当前执行的位置。
获取下一个元素的时候,就从上次结束的位置接着往下去执行函数,直到函数结束或者遇到yield为止;
如果遇到yield就将yield后面的值作为结果返回,并且保存当前执行的位置。如果函数结束了,就出现StopIteration异常

生成器对应的函数,执行完成遇到yield的次数,决定了生成器能产生的数据的个数

def func1():
    print('abc')
    yield 123
    print('!!!!!!')
    yield 100


re = func1()
print(re)
next(re) - 执行re对应的函数的函数体,将yield关键字后边的值作为结果
print('===:', next(re))
 print('===:', next(re))
print('===:', next(re))


def numbers():
    for x in range(101):
        yield x
        print('next', x)


gener = numbers()
print(next(gener))
print(next(gener))
print(next(gener))

写一个生成器可以无限产生学号

def creat_id():
    num = 0
    while True:
        yield 'stu'+str(num)
        num += 1
gener_id = creat_id()
print(next(gener_id))
for x in range(10):
    print(next(gener_id))

print(next(gener_id))

练习:写一个生成器,可以不断产生斐波那契数列:1,1,2,3,5,8,13,21....

def sequence(n):
    pre_1 = 0
    pre_2 = 1
    for _ in range(n):
        yield pre_2
        pre_1, pre_2 = pre_2, pre_1+pre_2

相关文章

  • 《原则》

    Day10/21 03-鳄鱼 今日读书: 今日读书时间:17:00-18:00 今日读书总结: 每天把自己...

  • D10-19 I4 分析学习

    学习总结: 【Day10—12】音频类APP 内容运营 >小组作业优秀借鉴点: 1、聚焦核心问题,拆解细化,抓大...

  • Day10总结

    匿名函数 普通函数: def 函数名(参数列表):函数体 匿名函数: 函数名 = lambda:参数列表:返回值函...

  • day10总结

    1.变量的作用域变量在程序中能够使用的范围 2.全局变量a.声明在函数或者类的外部的变量都是全局变量b.全局变量是...

  • day10总结

    1.变量的作用域变量在程序中能够使用的范围 2.全局变量a.声明在函数或者类的外部的变量都是全局变量b.全局变量是...

  • Day10总结

    1.变量的作用域 变量在程序中能够使用的范围 a.全局变量声明在函数或者类的外部的变量都是全局变量作用域是从变量声...

  • DAY10 总结

    We all treat that, every coin has two sides, as a commen ...

  • day10总结

    一、匿名函数 1.什么是匿名函数匿名函数还是函数,只是声明的格式和普通函数不一样。只适用于函数功能比较简单的函数 ...

  • 阅读笔记31

    Day10/21 【今日读书】《穷查理宝典》第4章第6-8讲 【今日读书时间】22:00-23:00 【阅读总结】...

  • 卟弃丰盛日记  Day10

    卟弃丰盛日记 Day10 卟弃今日计划 Day10 2020.11....

网友评论

      本文标题:day10总结

      本文链接:https://www.haomeiwen.com/subject/admafqtx.html