Python学习6

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案 本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。 阅读详情

1.常用内建模块

(1)collections
①namedtuple
nametuple可以创建一个自定义的tuple对象,并且可以用属性,而不是索引直接引用tuple的某个元素:

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print p.x, p.y
1 2

②deque
deque是为了高效实现插入和删除操作的双向列表,使用于队列和栈:

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('d')
q.appendleft('Z')
print q
q.pop()
q.popleft()
print q

deque(['Z', 'a', 'b', 'c', 'd'])
deque(['a', 'b', 'c'])

deque没有像list一样的pop(i)insert(i, 'a')方法

③defaultdict
使用dict时,如果key不存在,就会抛出错误,如果想key不存在时,返回一个默认值,就可以用defaultdict

from collections import defaultdict
d = defaultdict(lambda: 'N/A')
d['key1'] = 'abc'
print d['key1']
abc
print d['key2']
'N/A'

默认值是调用函数返回的,在创建defaultdict对象时传入。除了这个不同,其他和dict都一样

④OrderedDict
使用dict时, Key是无序的,要想保持Key的顺序,可以用OrderedDict:

from collections import OrderedDict
d = dict([('a', 1), ('b', 2), ('c', 3)])
d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

OrderedDict实现一个FIFO(先进先出)的dict:

from collections import OrderedDict

class FIFO(OrderedDict):

    def __init__(self, capacity):
        super(FIFO, self).__init__()
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKet = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
             last = self.popitem(last=False) # 等于False时,删去第一个元素,等于True时删去末尾元素
             print 'remove', last
        if containsKey:
            del self[key]
            print 'set:', (key, value)
        else:
            print 'add:', (key, value)
        OrderedDict.__setitem__(self, key, value)

⑤Counter
Counterdict的一个子类,是一个简单的计数器:

from collections import Counter
c = Counter()
for ch in 'programming':
    c[ch] = c[ch] + 1
print c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})

(2)base64
Base64是一种用64个字符来表示任意二进制数据的方法。具体看
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001399413803339f4bbda5c01fc479cbea98b1387390748000

(3)struct
该模块用来解决str和其他二进制数据类型的转换。具体同上

(4)hashlib
pyhon的hashlib提供了常见的摘要算法,如MD5,SHA1等

摘要算法,又称哈希算法,散列算法。它通过一个函数,把任意长度的数据转换为一个固定长度的数据串。
MD5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示:

import hashlib

md5 = hashlib.md5()
md5.update('how to use md5 in python haslib?')
print md5.hexdigest()
6839d1d832d462c7d1324f68c90c9146
#如果数据量很大,可以分开来调用update,结果相同

另一种常见的摘要算法是SHA1,和MD5完全类似,调用方法的时候改成hashlib.sha1就可以,它的结果是160bit字节,通常用40位的16进制字符串表示。

比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

(5)itertools
①count(n)
会创建一个无限迭代器,可以用来打印出从n开始的自然数序列:

import itertools
natuals = itertools.count(1)
for n in natuals:
    print n
1
2
3
...

②cycle()
会把传入的一个序列无限重复下去

cs = itertools.cycle('ABC')
for n in cs:
    print n
A
B
C
A
B
C
...

③repeat()
把一个元素无限重复,输入第二个参数可以指定次数:

ns = itertools.repeat('A', 10)
for n in ns:
    print n
 A
 A
 A
 ...

对于这些无限序列,通常会通过takewhile()等函数根据条件来截取出有限序列:

natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x <= 10, natuals)
for n in ns:
    print n #打印出1到10

④chain()
可以把一组迭代对象串联起来:

for c in itertools.chain('ABC', 'XYZ'):
    print c
A
B
C
X
...

⑤groupby()

把相邻的重复元素挑出来放一起:

for key, group in itertools.groupby('AAABBBCCAAA'):
    print key, list(group)
A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A', 'A']

实际上挑选是通过函数完成的,只要作用于函数的两个元素返回的值相等,这两个元素就被认为是在一组的,函数返回值作为组的key

for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c,upper())
    print key, list(group)
A ['A', 'a', 'a']
...

⑥imap()
imap()map()的区别在于,它可以作用于无穷序列,并且如果两个序列的长度不一致,以短的为准:

for x in itertools.imap(lambda x, y: x*y, [10, 20, 30], itertools.count(1))
    print x
10
40
90

imap()实现了“惰性计算”,也就是在需要获得结果的时候才计算。

⑦ifilter()
就是filter()的惰性计算

09、Flutter FFI Dart Native API 本文介绍了 Dart Native API 的基本用法,解决了 Dart 与 C 异步通讯的问题 阅读详情

相关推荐

STM32CubeMx + FatFs 实战:SD卡DMA传输中断回调问题深度解析

本文深度解析了在STM32CubeMx环境下,结合FatFs文件系统并使用DMA进行SD卡读写时,程序可能出现的“卡死”问题。核心原因在于HAL库的弱函数回调机制未被正确处理,导致DMA传输完成中断后,状态机锁死。文章提供了两种实战修复方案:直接修改HAL库文件或在用户代码中重写回调函数,并给出了关键的配置检查点与调试技巧,帮助开发者彻底解决SD卡DMA传输中断回调失效的难题。

weixin_29176179的博客 306

Pandas 之groupby操作

pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。对DataFrame的列应用各种各样的函数。应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等。计算透视表或交叉表。执行分位数分析以及其...

帮助100万人颠覆负面潜意识,实现人生蜕变,培养1万名潜意识开发导师 2197

Windows 11安装realtek audio control

Windows 11安装realtek audio control,解决无法链接RPC问题

m0_46144825的博客 8万+

详解Python中的itertools模块

itertools模块的介绍 在Python中,迭代器(Iterator)是常用来做惰性序列的对象,只有当迭代到某个值的时候,才会进行计算得出这个值。因此,迭代器可以用来存储无限大的序列,这样我们就不用把他一次性放在内存中,而只在需要的时候进行计算。所以,对于读取大文件或者无线集合,最好是使用迭代器。实际上,Python2的大多数函数都是返回列表等序列,而Python3都已经改进为返回迭代器。 P...

蒲公英 1463

Python学习6

Python学习6

heimu24的博客 173

python学习书籍推荐-Python语言之6本机器学习书籍推荐

本篇文章主要讲述Python语言之6本机器学习书籍推荐,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。机器学习是实现人工智能的一种途径,它和数据开掘有一定的相似性,也是一门多领域交叉学科,触及概率论、核算学、逼近论、凸剖析、核算复杂性理论等多门学科。对比于数据开掘从大数据之间找互相特性而言,机器学习愈加注重算法的设计,让核算机可以白动地从数据中“学习”规则,并利用规则对不知道...

weixin_37988176的博客 1539

探索Leachim6S:一款创新的Python学习工具

探索Leachim6S:一款创新的Python学习工具 leachim6S Hello world in every computer language. Thanks to everyone who contributes to this, make sure to see CONTRIBUTING.md … ...

gitblog_00006的博客 481

MITx 6.86x机器学习Python教程:从线性模型到深度学习

MITx 6.86x机器学习Python教程:从线性模型到深度学习 本教程旨在帮助您了解并运用位于https://github.com/sylvaticus/MITx_6.86x 的开源项目。这个项目包含了MITx在线课程“Machine Learning with Python: from Linear Models to Deep Learning”的笔记和资源。接下来,我们将深入探讨其目录...

gitblog_00400的博客 728

《机器学习实战》书中python2.7与3.6的区别-持续更新

《机器学习实战》书中使用的是python2.7,而对于现在新接触python的同学来说都是上手python3.6版本。 由于本渣渣也正在学习此书,将陆续列出遇到的不同于现实编码的困难与解决方法(如果能解决的话.......)。 1.在import numpy时候,书中提倡from numpy import * 而我们在学习python3.6时常用import numpy as np,

TcD的博客 7918

机器学习+深度学习python3.6 **python3.6+win**

python3.6+win 1.更新pip python -m pip install --upgrade pip 2.显示pip list 3.离线安装 pip install numpy-1.11.1+mkl-cp27-cp27m-win_amd64.whl 上面我安装不是这个版本,根据自己的需要 4.版本问题—keras和tensorflow的版本对应关系 https://www.cnblogs.com/carle-09/p/11661261.html TensorFlow 1.9.0 + Kera

zji 288

无需安装python程序,推荐6个靠谱网站在线学习编写python代码

创建页面,输出项目名称,或者选择一些默认的项目模版,比如上面列出的pandas数据分析,Djnago web编程,Pygame游戏编程,matplotlib和Turtle绘图编程,或者选择空项目。进入网站后,选择python,然后编写代码并点击运行按钮。

kymppcds的博客 8949

给想要学习Python的0基础的小伙伴6条建议

别忘了看这6条建议

大模型教程的博客 670

Python3.6学习(一)

  2017的开始,打算学习一下被以往好久的Python,也学习用博客记录一下自己的技术路线。以后回头看看说不定会莞尔一笑~   听着齐一的这个年纪,有点额外感叹自己,明年即将30岁,希望自己能够而立,同时承担起自己的小家,顺利的话再有自己的宝宝就是人生赢家了,嘿嘿。   言归正传,回到学习Python的记录。   首先从Python的官网下载 Python3.6,由...

157

学习python3.6的数字计算

学习“笨办法”学python3.6纪录。 理解False和Ture判定。 python3.x中希望看到数字计算结果()内不能使用“”。 要得到更准确的数值,需要使用浮点数,就是在/前后的数字加上.0 在编程中%是表示求余数。 数字计算优先级:()指数 乘 除 加 减。 # 我们现在数一数我有多少鸡: print("I will now count my chickens:") # 母鸡有,除法前后...

tachyonxue的博客 892

如何把int[]变为List

用Arrays.asList(int[])会变成一个List<int[]>型的list可以用Arrays.stream(int[]).boxed().collect(Collectors.toList());

CodeMask的博客 2920

java hashmap源码学习一 属性、构造方法

java8中HashMap的主要结构由数组,单链表和红黑树组成。 HashMap有一个属性load_factor(加载因子),它控制hashmap在容量达到多满时(加载因子*容量)要进行扩容,默认为0.75。加载因子大可以节省空间,但会增加查询成本。 它的主要属性:// 默认容量为16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;// 最

CodeMask的博客 1468

Pieces

1.把数组的全部元素设置成某个值 Array.fill(a, 5) 第一个参数是数组,第二个是要设置的值

CodeMask的博客 739

java 数据结构与算法 BinaryTree二叉树编写

本二叉树可以通过迭代得到二叉树的高度、节点个数,通过迭代实现了前序中序后序遍历二叉树的方法,同时通过栈实现了非迭代的前序中序后序遍历二叉树的方法。import java.util.Stack;public class BinaryTree { TreeNode<String> root = null; public BinaryTree() { this.root =

CodeMask的博客 661

java疯狂讲义第四章练习题

1.按照取子字符串,中文占两个字节,英文占一个字节package practice;public class substring{ public static String getSubstring(String s, int start, int end){ String r = new String(s); String result = "";

CodeMask的博客 658

Java学习2 多态 强制类型转换 instanceof

1.多态java引用变量有两个类型,一是编译时的类型,二是运行时的类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象的类型决定。 两个类型不一致时,就会出现多态。public class BaseClass{ public int a = 10; public void base(){ System.out.println("父类普通方法"

CodeMask的博客 570

Java疯狂讲义第三章练习题

package practice;import java.util.Scanner; import java.lang.Math;public class DrawCircle{ public static void main(String[] args){ int radius; System.out.println("Please input a radi

CodeMask的博客 440

Python学习5

1.文件读写(1)读文件 使用open()传入文件和标识符:f = open('D:/Workspace/PycharmProjects/test/beread.txt', 'r')//标识符'r'表示读//如果文件不存在,就会抛出IOError错误,如果打开成功,就可以用read()方法一次把文件的全部内容读到内存 f.read()//最后需要调用close()关闭文件 f.close()如果文

CodeMask的博客 395

撰写研究申报国家社科基金的几个问题.ppt

撰写研究申报国家社科基金的几个问题.ppt

铁路接触网异物数据集(166张)

由于拍摄图像中的铁路接触网异物极少,需要手动为铁路接触网异物数据集添加不良状态,本文铁路接触网异物数据集共计166张图片,供研究铁路相关病害检测的学者进行使用,此数据集主要用于神经网络中的训练中

上一篇: Python学习5
下一篇: JAVA LinkedList 数据结构学习
CodeMask
博客等级 码龄9年 2粉丝 20原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值