python高级 之(一) --- 函数类型

函数

  • 模块

  模块: 一个py文件就是一个模块, 每个模块之间是可以相互访问的 访问之前需要进行导入

  分类: 1.系统提供的模块 math random

     2.自己自定义的,自己封装的常用功能的的py文件

     3.第三方模块需要进行安装。安装格式: pip install 三方模块名

  导入:1. import 模块名 ;使用:模块名.内容

      import random;random.randint(1, 100)

     2. from 模块 import 具体某个内容

      from random import randint;使用:randint(1, 100)

     3. 通配符*导入 泛指该模块中所有的内容

      from 模块名 import *

  •  包

  包:类比成计算机中的文件夹,一个个的文件夹就是在对计算机中的内容进行分类整理的 方便于查找东西。

    计算机中的文件不允许重名,就想保存两个重名的文件,把他们放在不同的文件夹中

  作用:对模块进行分类管理。给模块提供了多级命名空间。有了包之后,导入该包下面的模块。导入方式: import 一级包名.二级包名....n级包名.模块名

  程序中建包:右键建立包的位置-- new -- python package;建完包之后 包中有一个__init__.py文件。

  作用:向解释器解释类似于计算机中文件夹的是一个项目的包 不是一个普通文件夹。

     普通的文件夹 没有再程序中为模块提供多级命名空间的作用。不同的普通文件夹中 模块不能相互访问

 

  • 程序入口设定

   程序入口:完成一个程序 需要几个py文件配合才能完成程序的运行。需要给一个标记 让别人知道到底是从哪个 文件开始启动执行的

       在启动执行的文件中加一个if判断。判断__name__的值,如果是起始文件 __name__的值就等于 __main__;如果不是 __name__ 的值他对应的模块名 

   判断格式:if __name__ == "__main__":启动文件的执行内容 

可变参函数

可变参数

  有一种需求,在封装功能的时候并不能确定到底有多少个未知项参与功能运算 也就无法确定声明函数时形参个数。

  把这个参数设置可变参数 ---> 使用一个形参接受多个实参 ---> 这个形参在函数中是容器[元组来存放的]

声明可变参数的格式

  def 函数名(*变量名, 形参1,.., 形参n):

    功能的运算

    return 结果   # 没有结果返回 此句可省

 1 """
 2 求n个数的累加和。将型参封装为可变参数
 3 """
 4 def nums_sum(*num):
 5     print(num)
 6     '''
 7     结果是元组容器:(12, 34, 56, 74, 86)
 8     也可以接收实参是 元组、列表、集合等类型。
 9     但是直接传递一个容器过来,会当作一个元素存在元组中。
10     若想传递成功,需要让实参和型参等价。即实参加*号
11     '''
12     total = 0
13     for ele in num:
14         total += ele
15     return total
16 if __name__ == '__main__':
17     res = nums_sum(12,34,56,74,86)
18     print(res)
19 
20     tuple0 = (77,45,86,34,23,23)
21     res = nums_sum(*tuple0)  # 让实参和型参等价。即实参加*号
22     print(res)

关键字参数

 关键字参数

  调用者调用函数的时候可以传入0个或者多个带有形参名的关键字参数

  声明函数时,有确定的形参个数,传递实参的 需要形参一一对应

  为了避免形参多的情况下传递实参的顺序不太确定,可以传递实参的时候采用:

    函数名(形参名=实参, 形参名=实参) 

  这种是根据形参名找到对应的形参为其赋值,不用担心顺序的问题

   命名关键字参数:

  调用者可以传入 形参名中没有设定 关键字参数 到底传入什么数据 需要在函数中进行判定:

  例如网站注册用户时:

    必填项 ---> 已知形参

    选填项 ---> 可以使用命名关键字参数 接收时的格式:形参名=实参

  声明方式:

    接受调用者传递的位置的关键字数据时 在函数中是通过字典来接受的

    def 函数名(形式参数1, 形式参数2, ... ,形式参数3, **参数名): 

       函数功能

 1 def accept(name,password,**kwargs):
 2     print(kwargs) # 结果:{'sex': '女', 'city': '北京'}
 3     if 'city' in kwargs:
 4         print("用户的居住地:",kwargs['city'])
 5     if 'sex' in kwargs:
 6         print("用户的性别:", kwargs['sex'])
 7 if __name__ == '__main__':
 8     accept("yaya","123456",sex="女",city='北京',)
 9     
10     dict0 = {'a':97,'b':78} # 也可以穿入字典类型,加**符号
11     accept("pepe",'123456',**dict0)

匿名函数

   匿名函数:生成函数一种简单方式 ---> 简单函数封装的简化。匿名函数执行一次就释放掉

 使用要求:函数功能中只有一个return语句就能结束函数的这种形式可以简化成匿名函数

 声明格式:lambda 形参1,形参2, .., 形参n : 功能的结果[功能的结果只能使用一句代码表示]

 使用场景:对一般型参中接收函数时,可以使用匿名函数来进行传递。这样比传递一个参数是带名函数节省方法池的内存

1 def add(a, b):
2     return a + b
3 """等价于"""
4 lambda a, b : a + b
1 # 对一般型参中接收函数时,可以使用匿名函数来进行传递。这样比传递一个参数是带名函数节省方法池的内存
2 list0 = [-19,33,54,75]
3 max_value = max(list0,key=lambda n:-n)
4 print(max_value)
5 # 要求是根据字典中年龄对列表进行降序排序
6 person_list = [{'name':'Tom','age':23},{'name':'Lili','age':45},{'name':'Susan','age':32}]
7 person_list.sort(key=lambda p_dict:p_dict['age'])
8 print(person_list)

偏函数

 偏函数:偏函数是对原本存在的函数的一种修改。借助偏函数 对使用场景比较多的函数进行修改来满足场景的需求

 两种方式:

  自定义一个方法 间接执行原本设计的方法

  使用系统提供的 funstools模块有一个方法可以转换对方法默认值的使用

 1 # 原来使用
 2 print('a',end='\t')
 3 print('a',end='\t')
 4 
 5 # 自定义可变参数
 6 def cus_print(*value):
 7     print(*value,end='......')
 8 # 再次使用时
 9 cus_print('a','b')
10 cus_print('c','d')
11 
12 # 系统提供的方法
13 import functools
14 func = functools.partial(print, end="!!!!")
15 func('good')

闭包

 闭包:在一个函数中声明另外一个函数 这种格式就叫做闭包

 作用域: 只有函数有独立的作用域 在函数中声明的内容仅在函数中有效 出了函数没有任何意义 例如在函数中声明的局部变量

1 # 闭包
2 def outer():
3     print('外部函数')
4     def inner():
5         print('内部函数')
6     # 只能在外部函数中调用inner
7     inner()
8 outer()

 global

  使用场景:在函数中使用修改成全局变量 需要在函数内部对该变量进行全局标记 否则的话 会将该变量解释为在函数中重新声明的局部变量 与全局变量无关

 nonlocal

  使用场景:闭包中如果想在内层函数中 使用修改外层函数声明的局部变量 需要对该变量进行nonlocal标记 否则会被解释成 在内部函数重新声明一个变量 与外部函数的变量无关

 


装饰器

  参考下一篇笔记 :https://www.cnblogs.com/TMMM/p/11395710.html 

生成器

  生成器 :

  根据逻辑生成一个存放数据的容器。弥补了列表生成式的弊端。

  生成器节省了内存,当生成器产生的时候 数据不会立即存放在内存中,而是取出一个存放一个

  与列表生成式的区别:

  列表生成式可以快速生成一批数据存放在内存中。列表生成式有一个弊端:

  如果生成了大量的数据 但是只使用 前面一些的数据,此时使用列表生成式就非常的浪费内存

  生成器有两种方式生成数据:

  将列表生成式的中括号换成小括号(生成的数据 数据的来源 对数据的进行筛选)

  类似于方法的声明 需要每次调用方法的时候需要返回生成的数据 。不是使用return 返回 [因为return直接结束函数] 使用yield代替return返回生成器中的数据

  生成器中获取数据

  通过next的方法 将数据从生成器中一个一个的取出

  已经取出数据了 再使用next获取数据 获取的是下一个数据 不会重复的获取同一个数据

 1 # 生成器的第一种方式生成和获取数据
 2 ge = (num for num in range(1,1000))
 3 print(ge) # 其类型 结果:<generator object <genexpr> at 0x106b9c480>
 4 value = next(ge)
 5 print(value) # 结果是:1。再次执行next(ge),结果是:2
 6 # 获取前10个数据
 7 for _ in range(10):
 8     value = next(ge)
 9     print(value)
10 '''
11 遍历的时候 需要将对应的值赋予给变量 就得起一个变量的名字来存放数据
12 遍历的时候 只是为了获取循环的次数,为不会获取序列中的元素 就可以使用_占位符变量
13 '''
14 
15 # 生成器的第二种方式生成和获取数据
16 def get_value():
17     for i in range(1,1000):
18         yield i # 此处并非结束函数,如果在yield后面还有平级的语句是会被执行的,但是是在第二次获取的时候执行
19 ge = get_value()
20 print(ge) # 其类型 结果:<generator object <genexpr> at 0x106b9c480>
21 value = next(ge) 
22 print(value)

  注意: 当生成其中的数据取完之后,再去取数据,就回报错

迭代器

  遍历序列:for 变量 in 序列

  迭代器:是相当于另外一种遍历序列的方式,通过next方法一个一个进行迭代 移动取数据的。如果一个序列想使用迭代器 前提这个序列是可以迭代的

  collections模块:Iterator   --- 迭代器

          Iteratable --- 验证序列是否可以迭代

 1 from collections import Iterable,Iterator
 2 
 3 # 验证指定数据是否是可迭代类型的
 4 res = isinstance(10,Iterable)
 5 print(res) # 结果 :False。 整型是不可以迭代的
 6 
 7 res = isinstance('10',Iterable)
 8 print(res) # 结果 :True。字符串类型是可以迭代的
 9 
10 res = isinstance(('10'),Iterable)
11 print(res) # 结果 :True。元组类型是可以迭代的
12 
13 res = isinstance(['10'],Iterable)
14 print(res) # 结果 :True。列表类型是可以迭代的
15 
16 res = isinstance({'10'},Iterable)
17 print(res) # 结果 :True。集合类型是可以迭代的
18 
19 res = isinstance({'10':10},Iterable)
20 print(res) # 结果 :True。字典类型是可以迭代的
21 """
22 Iterable 这个类型验证的结果是:所有的序列都是可以迭代的[遍历],for in 进行遍历
23 能用for in进行遍历的序列,不一定能用迭代器进行遍历。迭代器遍历使用next方法一个一个迭代的
24 生成器 --- 可以使用next来迭代 --- 就可以使用迭代器迭代。
25 列表 --- 可以使用for in进行遍历 --- 但不能使用迭代器迭代
26 """
27 
28 # 若想使用迭代器进行迭代列表类型,需要使用iter(序列)进行转换,
29 # 转化成Iterator迭代器的类型才可以使用next方法进行遍历迭代
30 list0 = [12,34,64,76,34,5,86]
31 it = iter(list0)
32 value = next(it)
33 print(value) # 结果:12
34 value = next(it)
35 print(value) # 结果:34

 

转载于:https://www.cnblogs.com/TMMM/p/11423392.html

python高级编程一(生成器与高级编程) 创建生成器,列表生成式,我们知道,只要将最外一层的中括号,改为小括号,⽣成器保存的是算法,每次调⽤ next(g) ,就计算出 g 的下⼀个元素的值,直到计算到最后⼀个元素,没有更多的元素时,抛出 StopIteration 的异常。当然,这种不断调⽤ next() 实在是太繁琐了,虽然是点一次出现一次,但正确的⽅法是使⽤ for 循环,因为⽣成器也是可迭代对象。在计算机的层次上,CPU执行的是加减乘除的指令代码,以及各种条件判断和跳转指令,所以,汇编语言是最贴近。迭代器是⼀个可以记住遍历的位置的对象。 阅读详情

相关推荐

Jetbrains IDE 配置上Gemini Code 插件,让你的的编程高效起飞~

Gemini Code Assist是 Google 家产品,基座模型为最新的Gemini 2.5 Pro。本篇实践了在 WebStrom 中Gemini Code Assist插件的高效编程。

2301_76993408的博客 4595

Python中随机数的使用

随机数功能 1. choice(seq) 此处的 seq 必须是有序的序列,返回序列中的一个随机项。 from random import * c1 = choice([1, 2, 3, 4, 5]) c2 = choice((1, 2, 3, 4, 5)) c3 = choice(range(1, 11)) print(c1, c2, c3) 2. randint(start, end) 返回 [start, end] 之间的一个随机整数。包头又包尾。 from random import * r

南枝向暖北枝寒 4952

云安全技术——搭建VPN

VPN(Virtual Private Network)是一种可以在公共网络上建立安全连接的技术。VPN是实现保密通信的基本手段,在windows系统上,可以直接进行VPN服务的搭建。1.VPN的工作原理:通过使用加密协议和认证机制,将本地计算机和远程服务器之间的通信加密和保护。2.VPN的分类:根据不同的方式和用途,VPN可以分为不同类型,例如远程访问VPN、站点到站点VPN等。3.VPN的优势:VPN可以带来许多好处,如提高数据安全性、隐藏真实IP地址、突破地理限制等。4.

qq_53142796的博客 3万+

python 函数类型_Python 函数类型系统

有些函数式语言(比如Haskell和Scala)是静态编译的,通过类型声明确定函数及其参数的类型。为了具备Python式的灵活性,这些语言发展出了各自的类型匹配规则,从而能编写针对相近的一组类的抽象函数。在面向对象的Python中,常用类继承代替复杂的函数类型匹配,利用Python的命名匹配规则将运算符与正确的方法关联。由于Python语言非常灵活,并不需要编译式函数语言的类型匹配规则,甚至可以说...

weixin_39541212的博客 131

【AIOPS实战】Dify+Zabbix:构建智能告警分析助手的核心架构与实现

本文详细介绍了如何利用Dify平台与Zabbix-MCP接口构建智能告警分析助手,实现自然语言查询告警、智能分析和报告生成。该系统通过AIOPS技术显著提升运维效率,支持中英文混合查询、自动根因分析,并内置多种优化方案确保稳定可靠。

weixin_29238147的博客 318

深入解析STM32官方库:.c/.h文件功能与应用场景

本文深入解析了STM32官方库中.c和.h文件的核心功能与应用场景。详细剖析了stm32f10x.h、启动文件、外设驱动文件等关键组件的作用,并通过LED闪烁实战演示了如何构建工程、配置文件和调用库函数。文章旨在帮助开发者理解官方库的架构,掌握高效使用技巧,从而降低STM32开发门槛,提升开发效率与代码质量。

weixin_29189377的博客 353

Python学习07_函数类型

文章目录函数类型递归函数匿名函数(lambda)高阶函数filter 函数map函数(映射)reduce函数apply函数zip函数 函数类型 递归函数 在一个函数体内部,调用函数本身,被称为递归函数。 def f(n): if n == 1: return 1 if n == 2: return 1 else: return...

qq_41884861的博客 240

Anaconda数据报错:Fatal error in launcher: Unable to create process using ‘“E:\Anaconda\python.exe“ “D:\

里面的pip.exe程序出现了问题,我这里直接删除,重新安装解决,上面已经手动删除pip.exe删除pip.exe,重新安装pip.exe用下面命令: 测试是否成功成功解决

Deng872347348的博客 1270

Fluent Python 2e示例代码:函数类型提示的完整指南

在现代Python开发中,类型提示已成为提升代码可读性和可靠性的关键工具。《Fluent Python 2nd Edition》作为Python编程的权威指南,其配套示例代码[08-def-type-hints/](https://link.gitcode.com/i/b753569268444c87309581c86d21be3f)模块提供了丰富的类型提示实践案例。本文将通过具体示例,带你掌握从

gitblog_02094的博客 1071

【网络与爬虫 61】移动端App爬虫终极指南:Android-iOS应用数据提取黑科技全解析

本文全面解析移动端App爬虫技术,涵盖Android和iOS两大平台的数据提取方法。从基础的网络抓包到高级的代码注入,从自动化测试框架到反调试技术绕过,为开发者提供移动端数据采集的完整解决方案和实战经验。

熵数实验室 3027

IoU的进化之路——IoU、GIoU、DIoU、CIoU四种损失函数总结

IoU、GIoU、DIoU、CIoU四种损失函数总结

chase 8130

python的高级用法(一)

python的一些高级用法系列文章

weixin_40301728的博客 418

【项目实战】DevOps制品管理之JFrog Artifactory介绍

JFrog Artifactory是一款领先的二进制软件制品仓库管理工具,由JFrog公司开发。

奶爸的编程之路,也就一周冷个三天 1354

python爱心代码高级

这个高级爱心代码不仅是一个有趣的编程练习,更是一个激发我们创意和想象力的起点。通过它,我们可以更深入地了解Python的绘图功能,并在实践中不断提升自己的编程能力和艺术修养。让我们一起用Python创造更多美好的事物吧!👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《Python全栈工程师》《跟老吕学MySQL》《Python游戏开发实战讲解》🌞《Python全栈工程师·附录资料》《Pillow库·附录资料》《Pygame·附录资料》《Tkinter·附录资料》

Python老吕的博客 2394

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【python测开】高级编程

本文介绍python高级编程内容。

weixin_39335999的博客 2417

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python3 高级编程

文章目录Python高级编程概述生成式(推导式)生成器迭代器异步编程并发(concurrent)并行(parallel)协程扩展:IO模型lambda表达式与函数式编程闭包装饰器C语言扩展调用系统API Python高级编程概述 生成式(推导式) 用于创建list的生成式 >>> list(range(1,11)) [1,2,3,4,5,6,7,8,9,10] 常见用法 ...

编程之路的专栏 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python编程高级篇(一)

python高级编程 之所以是高级编程,是因为涉及的概念比较抽象。 在python编程的世界里,一切皆是 对象,这是现实世界里的单身狗们所憧憬的的样子(玩笑!!)。 既然一切都是对象,就是说:类,类的实例,类属性,函数,变量等都是对象(object)。 对象类别判断 常用的函数有 type 和 isinstance >>> type(1) <class 'int'> ...

shadow20112011的博客 264

python(高级特性、高级函数、)

我们都知道,电脑的容量是有限的,list是不能无限大的。有什么区别呢,最主要的区别是,容量。会发现,python的for循环会更加抽象,比如说,最常见的是list和tuple,他们是有下表的,但是python也可以遍历没有下标的。这个类似于f=log(f),我们知道,log函数返回的是一个函数,f是个变量指向了wrapper函数。text参数传入,decoretor函数返回一个decorator函数,接下来和上面的操作一样的。按照我们常规的思维来说,i,传入会立即返回一个值,但是,闭包不会。

lindaiyuvaryhapp的博客 1504

python高级程序设计及应用,python高级程序设计难吗

下面是一些关键点:Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译用python画雪人贺卡。其他解释型语言还包括PHP和Ruby。Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I’m a string"这样的代码,程序不会报错。Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。

2401_82891043的博客 934

python 高级编程_Python 高级编程读书笔记(一)

python 高级编程读书笔记(一)python 高级编程读书笔记,记录一下基础和高级用法python2 和 python3 兼容处理使用 sys 模块使程序 python2 和 python3 兼容import sysver=sys.version_info#(major=3, minor=6, micro=6)if ver5 and 6>7)->(6666):return num+1print...

weixin_39692045的博客 208

python高级面试题_10个高级python面试问题

python高级面试题With Python becoming more and more popular lately, many of you are probably undergoing technical interviews dealing with Python right now. In this post, I will list ten advanced Python inte...

weixin_26720753的博客 2895

Python高级特性

我一直认为Python是一门很神奇的语言。神奇之处在于其既可阳春白雪,亦可下里巴人。也就是其简单到几乎所有的人稍加学习即可上手,但是你如果细细品味,就会发现他还有很多高深的东西。正如一位漂亮的姑娘,一眼看上去就会喜欢上。交往深入,你会发现她精通琴棋书画而且非常有内涵,我相信你这时肯定会深深的迷恋上她。 这篇文字的目的就是想整理一些Python的高级特性,试图为大家揭开Python的神秘面

张知临的专栏 1万+

Python 高级编程(第2版)

内容简介 Python 作为一种高级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。 本书基于 Python 3.5 版本进行讲解,深度揭示了 Python 编程的高级技巧。本书从 Python 语言及其社区的现状开始介绍,对 Python 语法、命名规则、Python 包的编写、部署代码、扩展程序开发、管理代码、文档编写、测试开发、代码优化、并发编程、设计模式等重...

GitChat 1万+

【Python高级编程】

Python 作为一门优秀的编程语言,有着很多优势

weixin_44479900的博客 9388

python高级编程教程_10个Python高级编程技巧

初识Python语言,觉得python满足了我上学时候对编程语言的所有要求。python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了。高级语言,如果做不到这样,还扯啥高级呢?01 交换变量>>>a=3>>>b=6这个情况如果要交换变量在c++中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了>>>a,b=b,a>>>print(...

weixin_39980082的博客 944

Python高级一

Python面向对象, 类和对象的关系、类的定义,对象的定义,类的创建和使用,self介绍, 对象的添加,魔法方法的介绍,构造器和析构器的定义和使用,类的继承,单继承,多继承,私有继承,私有继承的 @property用法

only_write_bug的博客 1034
上一篇: python --- 难点重点总结
下一篇: python高级 之(二) --- 类装饰器
baoding4359
博客等级 码龄11年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值