栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python第四周学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python第四周学习笔记

目录

1、函数

1.1 函数参数

1.2 函数的返回值return

1.3 变量的作用域

1.4 回调函数

1.5 闭包函数

1.6 匿名函数 lambda(表达式)

1.7 迭代器 (iterator)


1、函数

1.1 函数参数

函数参数包括普通参数(位置参数),默认参数,收集参数,命名关键字参数,关键字收集参数。对于普通参数和默认参数,是日常所见的。

收集参数:专门收集多余的实参,或者理解为不确定需要传递多少个实参,直接用一个形参来接收。

def func(sign, *args):  # args为收集参数,并且args在这里为元组
    if x == '+':
        print(args[0] + args[1] + args[2])
    elif x == '-':
        print(args[0] - args[1] - args[2])
    elif x == '*':
        print(args[0] * args[1] * args[2])
    elif x == '/':
        print(args[0] / args[1] / args[2])


i = 0
while i < 4:
    x = input("请输入+、-、*、/四个符号:")
    func(x, 100, 200, 300)
    i += 1
# 运行结果
请输入+、-、*、/四个符号:+
600
请输入+、-、*、/四个符号:-
-400
请输入+、-、*、/四个符号:*
6000000
请输入+、-、*、/四个符号:/
0.0016666666666666668

命名关键字参数:在收集参数后面,必须通过形参的名字来进行传递

# 命名关键字参数(在收集参数后面)
def func(a, b, c=3, *args, name):
    print(a, b, c)
    print(args)
    print(name)


func(1, 2, 3, 4, 5, 6, 7, 8, name='abcd')  # 必须给命名关键字赋值
# 运行结果
1 2 3
(4, 5, 6, 7, 8)
abcd

关键字参数收集:

# 关键字收集参数
def func(a, b, c, *args, name, age, **kwargs):
    print(a, b, c)
    print(args)  # 普通收集参数,会把多余的参数收集为元组
    print(name, age)
    print(kwargs)  # 关键字参数收集,会把多余的关键字收集为字典


func(1, 2, 3, 11, 22, 33, name='aaa', age='222', sex='ccc', weight='250')
# 运行结果
1 2 3
(11, 22, 33)
aaa 222
{'sex': 'ccc', 'weight': '250'}

1.2 函数的返回值return

在一个函数中,可以返回一些内容,也可以不返回,返回给函数调用处,用一个变量来接收。

1.3 变量的作用域

作用域:当前起作用、可用的范围区域,也可以叫变量的有效范围。有全局变量和局部变量。

全局变量:在函数内使用global关键字定义的变量就是全局变量,在函数外定义的变量,在函数内使用global关键字声明,那么也是全部变量。在函数外定义的变老了,函数可以访问,但是不能修改

局部变量:在函数内部可以使用的变量,在函数为不能使用

数据类型又分为:

可变数据类型(列表,字典):在函数外定义的变量,在函数内可以使用并且修改

不可变数据类型(其他类型):在函数外定义的变量,在函数内部只能访问,不能使用其他操作


关于函数作用域有以下两个函数

globals():获取全局变量数据

locals():获取当前作用域的数据


nonlocal关键字:在局部函数中使用。如果定义了一个函数(暂时称之为外函数),又在这个外函数里面定义了一个局部变量和一个内函数,那么如果内函数要引用这个局部变量是可以的,但是只能访问。如果要访问并且使用这个局部变量要在内函数用nonlocal关键字进行引用。

1.4 回调函数

函数中的参数可以是任意类型的,那么参数也可以是一个函数。如果一个函数中要求传递的参数是一个函数,并且在函数中使用了传递进来的参数,那么称为回调函数。

# 回调函数
def func(f):
    print('这里调用了func')
    f()


def function():
    print('这里调用了function')


func(function)  # 将函数名function当func函数的实参
# 运行结果
这里调用了func
这里调用了function

1.5 闭包函数

既然可以把函数作为一个形参进行传递,那么也可以返回一个函数,这就叫闭包函数。但是要满足条件:必须是函数内返回的内函数,并且这个返回的内函数还使用了外函数中的局部变量

# 闭包函数


def person():  # 一个获取钱
    money = 0

    def work():  # 工作一次加100
        nonlocal money
        money += 100
        print(money)
    return work  # 返回一个函数


res = person()  # return work,res = work
res()  # 调用res,相当于调用了work函数
res()
# 此时,就不能够在全局中对money这个局部变量进行如何操作
# 闭包的作用:保护了函数中的变量不受外部的影响,但是又不影响使用
# 运行结果
100
200

1.6 匿名函数 lambda(表达式)

匿名函数的意思就是说可以不使用def定义,并且这个函数也没有名字。在python中可以使用lambda表达式来定义匿名函数。

注意:lambda表达式仅仅是一个表达式,不是一个代码块。所以lambda又叫做一行 代码的函数。lambda表达式也有形参,并且不能访问除了自己的形参之外的任何数据包括全局变量。

"""
lambda [参数列表]:返回值
"""


def jia(x, y):
    return x+y


print(jia(2, 3))

# 改成lambda表达式来封装
res = lambda x, y: x+y
print(res(4, 4))

# lambda也可以有分支结构,但是不能写很复杂的分支
# lambda 参数列表: 真区间 if 表达式判断 else 假区间
res = lambda sex: "很man" if sex == '男' else "很漂亮"
print(res('女'))
# 输出结果
5
8
很漂亮

1.7 迭代器 (iterator)

迭代器是python中最具特色跌的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住访问遍历的位置的对象,因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。从集合的第一个元素开始访问,直到集合中的所有元素访问完毕,迭代器只能从前往后一个一个的遍历,不能后退。

迭代器:是一个能被next函数调用并不断返回下一个值的对象,称为迭代器。

# 迭代器
# range(1,10) 返回从1到9 返回一个可迭代的对象
# range(10,1,-1) 返回从10到2 返回一个可迭代的对象
# 但是数据量太大时,使用range并不能有效的实现功能
"""
iter()
    功能:把可迭代的对象,转化为一个可迭代的对象
    参数:可迭代的对象
    返回值:迭代器对象(str, list, tuple, dict, set, range)
    注意:迭代器一定是一个可以迭代的对象,但是可迭代对象不一定是迭代器,是两个不一样的概念
"""

arr = ['孙悟空', '猪八戒', '唐僧', '沙僧']
res = iter(arr)
print(res, type(res))  # 这里的res就是迭代器对象

# 使用next()函数去调用迭代器对象
r = next(res)
print(r)
print(next(res))
print(next(res))
print(next(res))  # 到这里就取完了
r = list(res)
print(r)  # 输出[]空列表
# 需要注意,迭代器对象的特点是取出来就没有了,next()调用一次取出一次,直到数据取完
# 输出结果
 
孙悟空
猪八戒
唐僧
沙僧
[]

拓展:isinstance()函数

from collections.abc import Iterator, Iterable  # 模块导入

var = '123456'
res = iter(var)

# isinstance() 检测一个数据是不是一个指定的类型,返回布尔类型
r0 = isinstance(var, str)  # True
r1 = isinstance(var, int)  # False
r2 = isinstance(var, Iterable)  # True,是一个可迭代对象
r3 = isinstance(var, Iterator)  # False,不是一个迭代器
r4 = isinstance(res, Iterable)  # True,是可迭代对象
r5 = isinstance(res, Iterator)  # True,也是一个迭代器
print(r0, r1)  # 是一个字符串,不是整形
print(r2, r3, r4, r5)
# 迭代器一定是一个可迭代对象,但反过来不一定是
# 结果
True False
True False True True

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号