Python进阶(一)
时间:2022-07-25
本文章向大家介绍Python进阶(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、args 和 *kwargs
*args
*args 是⽤来发送⼀个⾮键值对的可变数量的参数列表给⼀个函数.
python
def test_var_args(f_arg, *argv):
print("first normal arg:", f_arg)
for arg in argv:
print("another arg through *argv:", arg)
test_var_args('yasoob', 'python', 'eggs', 'test')
这会产⽣如下输出:
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test
**kwargs
**kwargs 允许你将不定长度的键值对, 作为参数传递给⼀个函数。 如果你想要在⼀个函数⾥处理带名字的参数, 你应该使⽤ **kwargs。比如参数是字典
Code
def greet_me(**kwargs):
for key,value in kwargs.items():
print ("{0} == {1}".format(key,value))
greet_me(name='michong',age=10)
输出
name == michong
age == 10
标准参数与args、*kwargs在使⽤时的顺序
Code
demo_func(fargs, *args, **kwargs)
2、调试(Debugging)
pdb.set_trace()方法
这个方法在jupter Notebook中也可以使用,这个方法使用的时候直接放在需要打断点的地方
python
import pdb
def make_bread():
pdb.set_trace()
return "I don't have time"
print(make_bread())
debugger模式下的命令
- c: 继续执⾏
- w: 显⽰当前正在执⾏的代码⾏的上下⽂信息
- a: 打印当前函数的参数列表
- s: 执⾏当前代码⾏,并停在第⼀个能停的地⽅(相当于单步进⼊)
- n: 继续执⾏到当前函数的下⼀⾏,或者当前⾏直接返回(单步跳过)
3、Generator 生成器
可迭代对象(Iterable)
对象中定义了可以返回一个迭代器的iter方法,或者定义了可以⽀持下标索引的getitem⽅法,它就是一个可迭代对象
迭代器(Iterator)
任意定义了next或者next发放,它就是一个迭代器
迭代(Iteration)
循环遍历的过程叫迭代
⽣成器(Generators)
它也是一中迭代器,使用yield生成一个值
Code
def generator_function():
for i in range(10):
yield i
for item in generator_function():
print(item)
输出:
# Output: 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
4、Map,Filter 和 Reduce
Map
遍历元素
Code
items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))
遍历方法
Code
def multiply(x):
return (x*x)
def add(x):
return (x+x)
funcs = [multiply, add]
for i in range(5):
value = map(lambda x: x(i), funcs)
print(list(value))
# 译者注:上⾯print时,加了list转换,是为了python2/3的兼容性
# 在python2中map直接返回列表,但在python3中返回迭代器
# 因此为了兼容python3, 需要list转换⼀下
# Output:
# [0, 0]
# [1, 2]
# [4, 4]
# [9, 6]
# [16, 8]
Filter
filter过滤列表中的元素,并且返回⼀个由所有符合要求的元素所构成的列 表,符合要求即函数映射到该元素时返回值为True.
Code
number_list = range(-5,5)
list(filter(lambda x:x%2==0 , number_list))
output
[-4, -2, 0, 2, 4]
Reduce
对一个列表进行计算并返回结果,可以使用Reduce函数
Code
#下面执行的是列表里面所有的元素相互相加的功能
from functools import reduce
reduce((lambda x, y:x+y),[1,2,3,4])
output:
10
5、set数据结构
集合
Code
some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n']
duplicates = set([x for x in some_list if some_list.count(x) > 1])
print(duplicates)
##输出: set(['b', 'n'])
交集
Code
valid = set(['yellow','red','blue','green','black'])
input_set = set(['red','brown'])
print(input_set.intersection(valid))
output:
{'red'}
差集
Code
valid = set(['yellow','red','blue','green','black'])
input_set = set(['red','brown'])
print(input_set.difference(valid))
output:
{'brown'}
基本操作
添加元素
Code
s.add( x )
s.update( x ) ##也可以添加元素,且参数可以是列表
移除元素
Code
s.remove( x ) ##将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
s.discard( x ) ##此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。
s.discard( x ) ##此外还有一个方法也是移除集合中的元素,且如果元素不存在,不会发生错误。
s.pop() ##随机删除集合中的一个元素
计算集合元素个数
Code
len(s)
清空集合
Code
s.clear()
集合内置方法完整列表
- ASP.NET MVC的Action Filter
- Android LayoutInflater详解
- 在Android中实现service动态更新UI界面
- VUE 入门基础(5)
- Android的UI设计与后台线程交互
- 更强悍的Silverlight: WCF RIA Services
- Java究竟该怎么学?文末有彩蛋!
- python-IDLE清屏和标记行数,其他推荐
- 从0到1:PostCSS 插件开发最佳实践
- VUE 入门基础(4)
- 实例演示Android异步加载图片
- 使用OData协议查询Windows日志
- Android之Notification介绍
- postcss-lazysprite: 一种生成CSS 雪碧图的懒惰姿势
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解卷积中的Winograd加速算法
- SpringMVC源码学习(一) - DispatcherSerlet和相关组件
- SpringMVC源码学习(二) - DispatcherServlet和相关组件
- 微服务使用 Hystrix 实现服务降级
- SpringMVC源码学习(三) - 请求处理的流程
- Hadoop框架:集群模式下分布式环境搭建
- 微服务 Hystrix 实现服务熔断
- 微服务 Gateway 的基本配置
- 有赞营销逆向域的探索与实践
- RabbitMQ 启动报错:Error: unable to perform an operation on node ‘rabbit@***‘. Please see diagnostics...
- MySQL|查询字段数量多少对查询效率的影响
- 如果MySQL事务中发生了网络异常?
- MySQL|update字段为相同的值是否会记录binlog
- 微服务配置 Config 与消息总线
- 贷款违约预测-Task5 模型融合