微控圈（MCU Loop） - 2020年6月
type: channel
link: https://www.mculoop.com/2020/06/
description: 嵌入式、物联网技术交流分享
items: 使用 pyinstaller 打包程序为单 exe 应用
items: Python 数据类型与条件运算笔记

使用 pyinstaller 打包程序为单 exe 应用
type: item
date: 2020-06-10T16:00:00+00:00
description: 一般的程序打包： pyinstaller -F main.py 如果包含 html、js 等文件需要特别处理一下。 待打包示例源代码 main.py： #!/usr/bin/python # -*- coding: UTF-8 -*- # 生成资源文件目录访问路径 def resource_path(relative_path): if getattr(sys, 'frozen', False): # 是否Bundle Resource base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path) filename = resource_path(os.path.join("web", "mesh.html")) # 访问 html 文件用 filename 就可以了 print(filename) 打包文件： 首先生成 spec 文件： pyi-makespec -F main.py 会生成 main.spec 文件，编辑它： datas 添加 ('web', 'web')，web 文件夹存放了 html、js 等文件，这个文件夹会被打包进去。 # -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis(['main.py'], pathex=['E:\\projects\\python\\test'], binaries=[], datas=[('web', 'web')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='main', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True ) 开始打包： pyinstaller -F main.spec

Python 数据类型与条件运算笔记
type: item
date: 2020-06-10T16:00:00+00:00
description: 数据类型 整数、浮点数、字符串（单引号、双引号、三引号、r 标记）、布尔值（True、False）、空值（None）、列表、字典、集合、用户自定义数据类型 字符串 字符串的单引号、双引号基本没有区别。 str 在内存中是用 Unicode 编码的 str 与 bytes 转换 用 ecode() 方法转换为 bytes，用 decode() 方法从 bytes 转换为 str >>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文' 注意 b 前缀（表示 bytes）的用法 函数方法 ord()：获取字符的整数表示 chr()：把编码转换为对应的字符 len()：获取字符串长度 >>> len('中文') 2 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6 >>> len('中文'.encode('utf-8')) 6 字符串格式化 %d、%f、%s、%x >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.' >>> '%2d-%02d' % (3, 1) ' 3-01' >>> '%.2f' % 3.1415926 '3.14' >>> 'Age: %s. Gender: %s' % (25, True) 'Age: 25. Gender: True'（注：%s会把任何数据类型转换为字符串） 列表（list) list 是一种有序的集合，可以随时添加和删除其中的元素。 >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy'] >>> len(classmates)（注：元素个数） 3 >>> classmates[0] 'Michael' >>> classmates[1] 'Bob' >>> classmates[-1]（注：倒数第一个元素） 'Tracy' >>> classmates[-2] 'Bob' >>> classmates.append('Adam') （注：追加元素到末尾） >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam'] >>> classmates.insert(1, 'Jack')（注：追加元素到某序号之后） >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] >>> classmates.pop()（注：弹出末尾元素，不要与队列混淆，况且也没有push方法） 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy'] >>> classmates.pop(1)（注：弹出指定序号元素） 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy'] >>> classmates[1] = 'Sarah'（注：直接给某元素赋值） >>> classmates ['Michael', 'Sarah', 'Tracy'] list 里面的元素的数据类型也可以不同 >>> L = ['Apple', 123, True] list 元素也可以是另一个 list >>> s = ['python', 'java', ['asp', 'php'], 'scheme'] >>> len(s) 4 >>> s[2][1] 'php' 元组（tuple） tuple 和 list 非常类似，但是 tuple 一旦初始化就不能修改，所以，自然也没有 append()、insert() 这样的方法。 可以近似地理解为常量数组。 >>> classmates = ('Michael', 'Bob', 'Tracy') >>> classmates ('Michael', 'Bob', 'Tracy') 只有 1 个元素的 tuple 定义时必须加一个逗号,，来消除歧义： >>> t = (1) >>> t（注：此时t的值是整型数值1，而不是一个元组） 1 >>> t = (1,) >>> t (1,) 字典（dict） 字典在其他语言中也称为 map，使用键-值（key-value）存储，具有极快的查找速度。 为什么 dict 查找速度这么快？…