tag 标签: python

相关帖子
相关博文
  • 热度 5
    2020-4-11 10:33
    621 次阅读|
    1 个评论
    【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行
    1、hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之一:hello micropython import sys for i in range(0, 2): print("hello micropython") print("hello ", end="micropython\n") print("implementation:", sys.implementation) print("platform:", sys.platform) print("path:", sys.path) print("Python version:", sys.version) print("please input string, end with Enter") r = sys.stdin.readline() w_len = sys.stdout.write(r) sys – 系统特定功能模块(标准库之一) sys.implementation——包含有关当前Python实现的信息的对象 系统:micropython 固件:V0.5.0 sys.platform——运行 MicroPython 的平台 平台:MaixPy sys.path——用于搜索导入模块的可变目录列表 路径: sys.version——实现的 Python 版本, 返回一个字符串 Python版本:3.4.0 sys.stdin——标准输入 sys.stdout——标准输出 2、查询闪存目录 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之二:查询闪存目录 import uos mount_points = uos.listdir("/") for fs in mount_points: print("------------") print(" dir:", fs) uos.listdir("/"+fs) uos – 基本的“操作系统”服务模块(标准库) uos.ilistdir( ) 此函数返回一个迭代器,然后生成与列出的目录中的条目对应的元组。如果不传参数,它列出了当前目录,否则它列出了dir给出的目录。 dir: flash 3、JSON编码和解码 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之三:JSON编码和解码 import ujson json_str = '''{ "name": "sipeed", "babies": }''' obj = ujson.loads(json_str) print(obj ) print(obj ) ujson –编码和解码模块(标准库) 该模块实现了相应 CPython 模块的子集,允许在 Python 对象和 JSON 数据格式之间进行转换。 load ujson.load(stream) 解析给定的流,将其解释为 JSON 字符串并将数据反序列化为 Python 对象。返回结果对象。解析继续,直到遇到文件结尾。如果未正确形成流中的数据,则会引发 ValueError。 loads ujson.loads(str) 解析JSON str并返回一个对象。如果字符串格式出错,则引发ValueError。 4、thread多线程 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之四:thread多线程 import _thread import time def func(name): while 1: print("hello {}".format(name)) time.sleep(1) _thread.start_new_thread(func,("1",)) _thread.start_new_thread(func,("2",)) while 1: pass _thread多线程支持模块 该模块提供了用于处理多个线程(也称为轻量级进程或任务)的低级原语-多个控件线程共享其全局数据空间。为了进行同步,提供了简单的锁(也称为互斥体或二进制信号量)。该threading模块提供了易于使用的功能,并在此模块之上构建了更高级别的线程API。 _thread.start_new_thread(函数,args ) 启动一个新线程并返回其标识符。线程使用参数列表args(必须是元组)执行函数 功能。可选的 kwargs参数指定关键字参数的字典。当函数返回时,线程以静默方式退出。当函数以未处理的异常终止时,将打印堆栈跟踪,然后线程退出(但其他线程继续运行)。 5、更新频率演示 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之五:更新频率演示 from Maix import freq cpu_freq, kpu_freq = freq.get() print(cpu_freq, kpu_freq) freq.set(cpu = 400, pll1=400, kpu_div = 1) 6、引脚索引 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之六:引脚索引 from board import board_info wifi_en_pin = board_info.WIFI_EN print(wifi_en_pin)#输出为8 board_info.pin_map()#打印所有 board_info.pin_map(8)#只打印8号引脚的信息 board_info内置库 主要用于方便用户使用开发板引脚配置,其中内置了对人友好的命名及接口,可以使用户减少对电器连接原理图的依赖。是内部定义的一个 Board_Info 全局变量, 使用 MicroPython 语法编写。 引脚索引 主要是将数字转换为人类友好的字符串,让用户方便编程。输入以下,请注意不要忽略 . 号,然后按下 tab键 进行补全,可以看到板级相关的引脚功能 board_info. 比如 输入以下代码,将返回数字 8,代表的是开发板的第8号引脚,其电器连接是wifi模块的使能引脚 board_info.WIFI_EN 查找方法 当用户不清楚引脚电器连接时,可以使用该方法查找 board_info.pin_map(pin_num) 参数 该方法不传入参数或者传入一个参数 pin_num: 引脚编号,范围 当不传入参数时,将打印所有引脚的板级电气连接信息,传入参数时,仅打印指定引脚的板级电气连接信息。 7、定时3秒后打印信息 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之七:定时3秒后打印信息 from machine import Timer def on_timer(timer): print("time up:",timer) print("param:",timer.callback_arg()) tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_ONE_SHOT, period=3000, callback=on_timer, arg=on_timer) print("period:",tim.period()) machine.Timer函数 硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。 MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。 共有 3 个定时器, 每个定时器有 4 个通道可以使用。 参数 id: Timer ID, (Timer.TIMER0~TIMER2) channel: Timer 通道, mode: Timer 模式, MODE_ONE_SHOT 或者 MODE_PERIODIC 或者 MODE_PWM period: Timer 周期, 在启动定时器后 period 时间, 回调函数将会被调用,(0,~) unit: 设置周期的单位,默认位毫秒(ms),Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者Timer.UNIT_NS callback: 定时器回调函数, 定义了两个参数, 一个是定时器对象Timer, 第二个是在定义对象是希望传的参数arg,更多请看arg参数解释 注意:回调函数是在中断中调用的,所以在回调函数中请不要占用太长时间以及做动态分配开关中断等动作 arg: 希望传给回调函数的参数,作为回调函数的第二个参数 start: 是否在对象构建成功后立即开始定时器, True:立即开始, False:不立即开启,需要调用start()函数来启动定时器 priority: 硬件定时器中断优先级, 与特定的CPU相关, 在K210中,取值范围是 , 值越小优先级越高 div: 硬件定时器分频器,取值范围 , 默认为0, clk_timer(定时器时钟频率) = clk_pll0(锁相环0频率)/2^(div+1) clk_timer*period(unit:s) 应该 =1 8、每隔 1 秒打印消息, 停止 5 秒后再重启, 5 秒后关闭并注销定时器 #MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之八:每隔 1 秒打印消息, 停止 5 秒后再重启, 5 秒后关闭并注销定时器 import time from machine import Timer def on_timer(timer): print("time up:",timer) print("param:",timer.callback_arg()) tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PERIODIC, period=1, unit=Timer.UNIT_S, callback=on_timer, arg=on_timer, start=False, priority=1, div=0) print("period:",tim.period()) tim.start() time.sleep(5) tim.stop() time.sleep(5) tim.restart() time.sleep(5) tim.stop() del tim machine.Timer 硬件定时器,可以用来定时触发任务或者处理任务,设定时间到了后可以触发中断(调用回调函数),精度比软件定时器高。 需要注意的是,定时器在不同的硬件中可能会有不同的表现。MicroPython 的 Timer 类定义了在给定时间段内(或在一段延迟后执行一次回调)执行回调的基本操作,并允许特定的硬件上定义更多的非标准行为(因此不能移植到其他板)。共有 3 个定时器, 每个定时器有 4 个通道可以使用。 常量 TIMER0: Timer0 id TIMER1: Timer1 id TIMER2: Timer2 id CHANNEL0: Timer 通道 0 CHANNEL1: Timer 通道 1 CHANNEL2: Timer 通道 2 CHANNEL3: Timer 通道 3 MODE_ONE_SHOT: Timer 只运行一次(回调一次) MODE_PERIODIC: Timer 始终运行(连续回调) MODE_PWM: 定时器不用来回调函数,用以产生PWM UNIT_S: 单位秒 (s) UNIT_MS: 单位毫秒 (ms) UNIT_US: 单位微秒 (us) UNIT_NS: 单位纳秒 (ns) 9、SPI 基本读写 MicroPython动手做(04)——零基础学MaixPy之基本示例 #程序之九:SPI 基本读写 from machine import SPI spi1 = SPI(SPI.SPI1, mode=SPI.MODE_MASTER, baudrate=10000000, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=28, mosi=29, miso=30, cs0=27) w = b'1234' r = bytearray(4) spi1.write(w) spi1.write(w, cs=SPI.CS0) spi1.write_readinto(w, r) spi1.read(5, write=0x00) spi1.readinto(r, write=0x00) machine.SPI SPI(Serial Peripheral Interface) 是一个同步串行协议,由主机和从机组成。 标准4线模式由 SCK(SCLK), CS(片选), MOSI, MISO 4条线连接主从机 在 K210 上, SPI 有一下特征: 共有 4 个 SPI 设备, 其中 SPI0 、SPI1、 SPI3 只能工作在主机模式下, SPI2 只能工作在从机模式时下, 在 MaixPy 上, SPI3已经用来连接了 SPI Flash, 暂时保留, 以后如果有必要再考虑开放接口与 SPI Flash 分时复用 支持 1/2/4/8 线全双工模式, 在 MaixPy 中, 目前只支持标准(摩托罗拉)4线全双工模式(即 SCK, MOSI, MISO, CS 四个引脚) 最高传输速率45M 支持DMA 4个可配置任意引脚的硬件片选
  • 热度 1
    2019-10-21 11:05
    913 次阅读|
    1 个评论
    By Toradex 秦海 1). 简介 随着 Python 在互联网人工智能领域的流行,大家也慢慢感受到 Python 开发的便利,本文就基于嵌入式 ARM 平台,介绍使用 Python 配合 PyQT5 模块来开发图形化应用程序。 本文所演示的 ARM 平台来自于 Toradex 基于 NXP iMX6 ARM 处理器的 Apalis iMX6 ARM 嵌入式平台。 2. 准备 a). Apalis iMX6Q ARM 核心版配合 Apalis Evaluation Board 载板 ,连接调试串口 UART1 (载板 X29 )到开发主机方便调试。更多关于 Apalis iMX6 配合 Apalis Evaluation Board 载板的说明请参考 Datasheet 和 开发上手指南 。 b). Apalis iMX6Q 默认的 Linux BSP 是不包含 Python , QT 等支持的,需要重新编译。 ./ 基于 Toradex Linux BSP release V2.8 ./ 参考 这里 搭建 Openembedded 编译环境,然后适配下面 patch ,用于使本文测试需要的 libsoc 适配 Python3 。 https://github.com/simonqin09/libsoc-examples/blob/master/python/0005-libsoc-python3-support.patch ./ 修改 build/conf/local.conf 文件,增加需要的组件 -------------------------- #IMAGE_INSTALL_append = " python3 python3-pip python3-libsoc python3-pyqt5 rng-tools " -------------------------- ./ 适配下面 patch ,在标准 image bb 文件中增加 QT5 的支持 https://github.com/simonqin09/libsoc-examples/blob/master/python/0003-angstrom-qt5-lxde-image.patch ./ 重新编译 image -------------------------- $ bitbake -k angstrom-qt5-lxde-image -------------------------- ./ 新生成的 image 位于 deploy/images/apalis-imx6/ 目录,参考 这里 的说明更新到 Apalis iMX6 模块上面 3). Python GPIO 中断测试程序 a). 首先我们先不包含图形界面,单独通过 Python 来完成简单的 GPIO 中断测试程序,本程序通过调用 libsoc 来完成 GPIO 控制,关于 libsoc 的使用和说明请参考 这里 。 b). Apalis Evaluation Board 载板硬件连接配置如下, X4 GPIO05(MXM3_11) 对应系统中的 GPIO 号码是 170 ,作为按键输入使用; X4 GPIO06(MXM3_13) 对应系统中的 GPIO 号码是 169 ,作为输出驱动 LED 使用。 X4 GPIO05 X34 SW5 X4 GPIO06 X34 LED1 c). 源代码请参考如下,分别实现了阻塞模式和非阻塞模式中断相应,实现功能就是按键交替点亮和关闭 LED 灯。 ./ 阻塞模式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_block.py // main 函数作为主函数,实现打开 GPIOs ,同时设定初始化状态为高电平输出; test_interrupt_handler 函数实现中断相应,采用 gpio_in.wait_for_interrupt 为阻塞式中断,捕获中断才会继续进行,捕获中断后做了简单的防误触处理。 ./ 非阻塞模式 – https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_nonblock.py // main 函数作为主函数,实现打开 GPIOs ,同时设定初始化状态为高电平输出;另外,在 main 函数里面采用 gpio_in.start_interrupt_handler 来使能中断相应,为非阻塞式;在 main 函数最后通过 while 来接收键盘输入实现退出应用; gpio_in.wait_for_interrupt 依然作为中断处理函数相应中断并驱动 LED 状态改变。 d). 将 Python 代码直接复制到 Apalis iMX6 上面测试运行结果如下: ./ 阻塞模式下,最后是通过 Ctrl-C 强制退出程序 ----------------------- root@apalis-imx6:~# ./gpiotest_block.py The LED initial status is ON The LED turns OFF interrupt times is 1 The LED turns ON interrupt times is 2 ^Clibsoc-gpio-debug: Interrupted system call Traceback (most recent call last): File "./gpiotest_block.py", line 54, in main(gpio_input_id, gpio_output_id) File "./gpiotest_block.py", line 45, in main test_interrupt_handler(gpio_in, gpio_out) File "./gpiotest_block.py", line 12, in test_interrupt_handler gpio_in.wait_for_interrupt(-1) File "/usr/lib/python3.5/site-packages/libsoc/gpio.py", line 118, in wait_for_interrupt if api.libsoc_gpio_wait_interrupt(self._gpio, timeout) != 0: KeyboardInterrupt ----------------------- ./ 非阻塞模式下 ----------------------- root@apalis-imx6:~# ./gpiotest_nonblock.py The LED initial status is ON please enter 'Q' to quit The LED turns OFF The LED turns ON The LED turns OFF Q Do you really want to quit? yes or no yes root@apalis-imx6:~# ----------------------- 4). 使用 PyQt5 实现图形化界面 GPIO 中断程序 a). 硬件配置和连接和上面的测试场景一致。 b). 为了方便开发 PyQt5 界面,首先通过 Qtcreator 创建如下 QWidget 项目 UI 界面 // LED Status 右边的 QFrame 方框以及 QLable 用于显示 LED 当前的状态 // ‘Turn ON’ 和 ’Turn OFF’ 两个 PushButton 用于通过界面控制 LED 状态, ’Exit’ PushButton 用于退出程序 ./ 最终的 UI 源代码参考如下,将对应的 mainwindow.ui 文件复制到 Apalis iMX6 Python 应用相同路径下 https://github.com/simonqin09/libsoc-examples/blob/master/python/mainwindow.ui c). 程序源代码参考如下: https://github.com/simonqin09/libsoc-examples/blob/master/python/gpiotest_pyqt5.py 说明如下: ./ class ApplicationWindow 用于实现 Qt5 界面以及相关按键操作: // 首先通过 loadUi 函数来加载之前制作好的 UI 文件 mainwindow.ui ,然后初始化界面显示,连接各个按键对应的处理程序 // 最后开启一个新的 Qthread 线程 self.thread ,用于处理外部 GPIO 按键中断相应,连接新线程反馈信号的处理程序,最后启动新线程 // LedStatusChange 函数为处理新线程反馈回来的 LED 状态变化信号而同步改变界面显示状态的函数 // Button_On_clicked 和 Button_Off_clicked 函数用于根据界面按键的点击来对应改变 LED GPIO 输出以及界面显示的函数 // Button_Exit_clicked 和 closeEvent 函数用于处理退出程序包括子线程的退出等相关的函数 ./ class gpioInterrupt 为用于处理 GPIO 中断同时对于改变 LED GPIO 输出以及将 LED 状态变化反馈给界面主程序 // 首先定义反馈信号,并初始化所需要使用的 GPIO 引脚 // run 函数部分基本就是上面第 3 章节的阻塞模式 Python 应用的代码,这里就不做赘述了 d). 测试运行结果如下: ----------------------- root@apalis-imx6:~# ./gpiotest_pyqt5.py The LED initial status is ON set LOW set HIGH The LED turns OFF button clicked for setting LOW The LED turns ON button clicked for setting HIGH root@apalis-imx6:~# ----------------------- 5). 总结 如上述示例,使用 Python 和 PyQt5 非常方便了创建一个嵌入式界面应用程序示例,相对于传统 C 语言开机要配置交叉编译环境,整个流程更加快捷方便,同时在实现比较简单的控制的时候其运行效率也是可以接受的,另外 Python 还可以集成大量的组件方便开发,就更加简化了比如设计机器视觉、人工智能等领域的嵌入式应用开发流程。
  • 热度 10
    2019-6-4 22:54
    32276 次阅读|
    2 个评论
    前言 板子申请了也有一段时间了,也快到评测截止时间了,想着做点有意思的东西,正好前一段时间看到过可以在MCU上移植MicroPython的示例,就自己尝试一下,记录移植过程。 MicroPython是什么 程序猿中有句俗语: 人生苦短,我用Python 。Python的强大和易用性让它不仅可以写网站,编程序,在嵌入式领域也有一席之地。 MicroPython ,是Python3编程语言的一个完整软件实现,包括Python标准库的一小部分,用C语言编写,经过优化可在微控制器和受限环境中运行。MicroPython是运行在微控制器硬件之上的完全的Python编译器和运行时系统。提供给用户一个交互式提示符(REPL)来立即执行所支持的命令。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。 MicroPython官方网站: MicroPython - Python for microcontrollers ( http://www.micropython.org/ ) MicroPython中文社区: micropython - 中文社区( http://www.micropython.org.cn/bbs/ ) MicroPython支持的开发板 从官方网站我们可以了解到,官方开发板主要有以下几种: PYB Nano V1.1基于STM32F401 PYB Nano V2基于STM32F411 PyBoard CN V2基于STM32F405 MicroPython ESP32 另外还支持其他系列的开发板: WiPy ESP8266 boards ESP32 boards STM32F4 Discovery board NUCLEO-F401RE board NUCLEO-F411RE board NUCLEO-F767ZI board NUCLEO-L476RG board Espruino Pico MicroPython移植和板子关系不大,主要支持的是芯片,如果自己的板子芯片是上面的这些型号,也可以刷MicroPython固件,对应的IO口需要更改,而且需要重新编译生成对应的固件。具体操作方法可以查看:官方Github地址:https://github.com/micropython/micropython,里面包括了源代码和Linux下的编译方法。开发板固件下载: MicroPython downloads( http://www.micropython.org/download ) Nucleo-F411RE移植MicroPython固件 正好MicroPython支持本次申请的 Nucleo-F411RE开发板 ,就试着把刷成MicroPython的固件,尝试一下使用Python来开发STM32,具体移植过程。 1.准备工作 支持Nucleo-F411RE的MicroPython固件: NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ( http://www.micropython.org/resources/firmware/NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ) 用于STM32 DFU下载的软件: STSW_STM32080_V3.0.6.zip ( https://comm.eefocus.com/media/download/index/id-1015890 ) PUTTY串口终端: putty-64bit-0.71-installer.msi ( https://the.earth.li/~sgtatham/putty/0.71/w64/putty-64bit-0.71-installer.msi ) 2.安装Dfu下载软件 下载完成后,安装DFU下载软件DfuSeDemo,非常简单,一路Next就行,在选择安装目录时,可以选择非系统盘。 3.硬件连接 由于Nucleo-F411RE板子的USB口是连接到ST-Link调试器,并没有一个连接到STM32 USB引脚的接口,所以我使用的是这种转接板,把USB的5个信号转接成5个排针,并和板子上的引脚连接: 转接板 开发板 VBUS 3.3 D- PA11 D+ PA12 IO GND GND GND 4.烧录MicroPython固件 和串口下载程序一样,使用DFU烧录固件前,也要先把STM32切换为 系统存储器启动模式 :即下载模式。上电之前要先设置BOOT0=1,BOOT1(PB2)=0,然后烧录MicroPython固件。 设置完成之后,连接电脑,设备管理会出现一个DFU设备 打开DfuSeDemo软件,选择已经下载的固件: NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ( http://www.micropython.org/resources/firmware/NUCLEO_F411RE-20190604-v1.11-25-gce8262a16.dfu ) 点击Upgrade升级,在弹出的界面,点击“是”。 等待升级完成,断电,把BOOT短接线拔掉,重新上电。 5.安装Putty 安装Putty,打开串口终端,选择ST-Link虚拟串口号,波特率115200 按一下板子上的黑色复位按键,串口输出: MicroPython v1.11-12-g6077d1715 on 2019-06-03; NUCLEO-F411RE with STM32F411xE Type "help()" for more information. help() Welcome to MicroPython! For online help please visit http://micropython.org/help/. Quick overview of commands for the board: pyb.info() -- print some general information pyb.delay(n) -- wait for n milliseconds pyb.millis() -- get number of milliseconds since hard reset pyb.Switch() -- create a switch object Switch methods: (), callback(f) pyb.LED(n) -- create an LED object for LED n (n=1,2,3,4) LED methods: on(), off(), toggle(), intensity( ) pyb.Pin(pin) -- get a pin, eg pyb.Pin('X1') pyb.Pin(pin, m, ) -- get a pin and configure it for IO mode m, pull mode p Pin methods: init(..), value( ), high(), low() pyb.ExtInt(pin, m, p, callback) -- create an external interrupt object pyb.ADC(pin) -- make an analog object from a pin ADC methods: read(), read_timed(buf, freq) pyb.DAC(port) -- make a DAC object DAC methods: triangle(freq), write(n), write_timed(buf, freq) pyb.RTC() -- make an RTC object; methods: datetime( ) pyb.rng() -- get a 30-bit hardware random number pyb.Servo(n) -- create Servo object for servo n (n=1,2,3,4) Servo methods: calibration(..), angle( ]), speed( ]) pyb.Accel() -- create an Accelerometer object Accelerometer methods: x(), y(), z(), tilt(), filtered_xyz() Pins are numbered X1-X12, X17-X22, Y1-Y12, or by their MCU name Pin IO modes are: pyb.Pin.IN, pyb.Pin.OUT_PP, pyb.Pin.OUT_OD Pin pull modes are: pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN Additional serial bus objects: pyb.I2C(n), pyb.SPI(n), pyb.UART(n) Control commands: CTRL-A -- on a blank line, enter raw REPL mode CTRL-B -- on a blank line, enter normal REPL mode CTRL-C -- interrupt a running program CTRL-D -- on a blank line, do a soft reset of the board CTRL-E -- on a blank line, enter paste mode For further help on a specific object, type help(obj) For a list of available modules, type help('modules') 6.开始Python开发之旅——点亮一个LED 点亮板载的绿色LED,串口输入命令点亮和熄灭LED pyb.LED(1).on() pyb.LED(1).off() pyb.LED(1).on() 更多Python控制外设的命令: Quick reference for the pyboard ( http://docs.micropython.org/en/latest/pyboard/quickref.html ) 参考资料 Micropython学习(二)STM32移植( https://blog.csdn.net/bobo184/article/details/84174990 ) 我的博客文章链接: http://www.wangchaochao.top/2019/06/04/Nucleo-F411RE-2/
  • 热度 9
    2019-5-15 22:59
    1713 次阅读|
    6 个评论
    Python 学习了一段时间的基础语法,的确感觉其语法的自由度很高,入门容易,但是并不友好。《 Python 编程从入门到实践》后半部分开始讲 pygame 来制作游戏,所描述的安装方式非常的简单:下载 pygame ;然后在 cmd 下输入命令: pip install pygame ,安装完成。 我懵逼了。 What?Pygame什么玩意?哪里下载?于是我搜索了一下,找到了pygame的官网 http://www.pygame.org/download.shtml ,里面最新的是这个: 但是下载下来以后,怎么敲命令都不行,折腾一个下午都没安装上去,总是错误,我都开始怀疑智商了,差一点就放弃了。找了很多安装文件之类的,都无法加载。到了晚上终于找到了 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame 这个地址,里面才找到合用的 pygame 安装文件。 用最后一个文件装好 pygame 以后,简单试验了一下书中的历程,然后兴致勃勃又去安装 Image 。这个要先安装 PIL ?!又是搜索不到,最终还是在这个网址下面找到了 Pillow 看第一句话才知道, Python 2 下面用的是 PIL ,但是不支持 Python 3 ,我用的是 Python 3.7 ,所以要用 Pillow 。 Python 的库实在是太混乱了,我已经晕了,不光说 2.x 和 3.x 不兼容、 win32 和 win amd64 不兼容我能理解以外, 3.6 、 3.7 都不兼容是什么鬼?下载 3.6 版本的 Pillow 就是装不上,也不说为什么。如果我们用 VS ,肯定会向下兼容,如果安装的库不合适,会自动提示,也会有官方的下载地址,甚至可以自动升级。而目前我所看到的 python ,仍然是一头雾水,安装错误一点提示都没有,完全需要运气去搜索猜测。到底能不能给我这样年纪大了的爱好者一条活路?! 为什么别人家安装是这样的吨吨吨下载安装完成: 而我是需要自己搜索、下载,自己敲命令自己判断是否安装成功?!怎么会这么复杂? 真是费了大功夫才把 Image 的库安装成功,并且写了一个简单的图像处理程序: from PIL import Image pil_im = Image.open("1.jpg") im2 = pil_im # 备份原始图像 w,h = pil_im.size # 获取图像尺寸 pil_im = pil_im.resize((w+w,h)) # 将图像尺寸横向拉长 box = (0, 0, w,h) re = im2.crop(box) pil_im.paste(re,box) # 将原始图像放在左侧 box = (w, 0, w+w,h) re = re.convert("L") pil_im.paste(re,box) # 将灰度图像放在右侧 pil_im.show() 输出的结果就是原始图像和灰度图像的对比,如下图,其实除了妹子很清纯以外,程序并不咋地: 而我十年前用 BCB 写的灰度图像转换用了多少行?如下,光一个灰度的函数就已经十几行了,还没算前面框架搭建,文件读取等函数,而在 Python 里面只用 2 行就可以实现,而且速度也快了不少,优势的确很明显。 void __fastcall TForm1::GrayTranClick(TObject *Sender) { Bitmap); int red,green,blue; int gray; GetRgbp(Sender); for(i = 1;i < x-1;i++) { for(j = 1;j < y-1;j++) { red = rgbp .r; green = rgbp .g; blue = rgbp .b; gray = red/3+green/3+blue/3; Pixels = RGB(gray,gray,gray); } } Assign(Bitmap); } 但是折腾了好几天的 Python ,作为一个单纯的爱好者来说,如果每次都是这么折腾的话,那我学习这个又能做什么?谁能指条明路出来?
相关资源
  • 所需E币: 2
    时间: 2020-5-3 09:24
    大小: 6.6MB
    上传者: 指的是在下
    本书是基于古德里奇和Tamassia的Java数据结构和算法,以及C++、java、古德里奇、Tamassia和Mount的相关数据结构和算法。然而,这本书并不是简单地将其他书籍翻译成Python。在改编本书的材料时,我们对本书的组织和内容进行了重大的重新设计,如下所示:•代码库已经完全重新设计,以利用Python的特性,例如使用生成器迭代集合的元素。许多在java和C++版本中被作为伪代码的算法直接呈现为完整的Python代码。•Ingeneral、Adtsade需要与Python的内置数据类型和Python的collections模块中的数据类型具有一致的接口。•第5章深入探讨了Python内置list、tuple和str类的基于动态数组的基础。新的附录A是关于str类功能的附加参考。•已创作或修订了450多幅插图。
  • 所需E币: 0
    时间: 2020-5-8 11:57
    大小: 12.92MB
    上传者: curton
    2015_Book_DataStructuresAndAlgorithmsWithPython.pdf
  • 所需E币: 0
    时间: 2020-4-5 17:31
    大小: 294B
    上传者: 雏羽
    400集最全视频+最全电子书
  • 所需E币: 3
    时间: 2020-3-2 14:15
    大小: 7.15MB
    上传者: 我是真理
    首先介绍Python工具的使用,以及Python的基础和进阶用法,为读者打下良好的基础:优秀的工具能帮助读者更有效地学习和使用Python,基础和进阶用法能让读者对Python有一些基本的认知。接着,本书介绍一些关键的Python模块,包括Python标准库中的自带模块、NumPy、Matplotlib、SciPy、Pandas等,这些模块提供了强大的功能:标准库模块提供了处理编程常见问题的工具,NumPy模块提供了科学计算的基础类型——数组,Matplotlib可以对数据进行可视化,SciPy可以进行一些高等数学的操作,而Pandas模块则提供了数据分析的基本功能。除了用法和模块,本书还介绍了Python中的面向对象编程,囿于篇幅,本书只介绍面向对象编程的用法,对这一机制不做过多介绍。最后,在已学习内容的基础上,本书提供了一个用Python分析中文小说的实例,并简要介绍数据分析的一些基本流程,供读者参考。本文档为jupyternotebook!
  • 所需E币: 4
    时间: 2019-12-19 14:17
    大小: 10.37KB
    上传者: 微风DS
    TPYBoardv102+v202家庭无线温湿度检测(完整源码)……
  • 所需E币: 1
    时间: 2019-10-25 14:45
    大小: 243.36KB
    上传者: sense1999
    Pillow是Python里的图像处理库(PIL:PythonImageLibrary),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
  • 所需E币: 3
    时间: 2019-8-6 17:20
    大小: 3.04MB
    上传者: bambooslip
    wxPythoninaction中文版
  • 所需E币: 3
    时间: 2019-8-6 17:24
    大小: 10.89KB
    上传者: bambooslip
    全书共分16章,对Python内部工作原理进行了一定深度的剖析,99%以上的案例代码使用Python3.5.1实现,也适用于Python3.4.x(除少数几个新特性之外)和*版本Python3.5.2以及Python3.6.0,极个别案例使用Python2.7.11实现(同样适用于其他版本Python2.7.x,包括*的Python2.7.12),适当介绍了Python代码优化、系统编程和安全编程的有关知识,满足不同层次读者的需要。另外,书中通过小提示、小技巧、注意拓展知识等形式介绍了更多的内容,全部内容远比章节目录所显示的要多,需要认真阅读才能真正领会其中的奥妙。本书适合作为Python程序员的开发指南,也可以作为高等院校计算机专业、软件工程专业等专业的Python教材,还可以作为Python爱好者的指导用书。
  • 所需E币: 3
    时间: 2019-8-6 17:31
    大小: 29.44MB
    上传者: bambooslip
    《PythonCookbook(第3版)中文版》介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字、日期和时间,迭代器和生成器,文件和I/O,数据编码与处理,函数,类与对象,元编程,模块和包,网络和Web编程,并发,实用脚本和系统管理,测试、调试以及异常,C语言扩展等。本书覆盖了Python应用中的很多常见问题,并提出了通用的解决方案。书中包含了大量实用的编程技巧和示例代码,并在Python3.3环境下进行了测试,可以很方便地应用到实际项目中去。此外,《PythonCookbook(第3版)中文版》还详细讲解了解决方案是如何工作的,以及为什么能够工作。《PythonCookbook(第3版)中文版》非常适合具有一定编程基础的Python程序员阅读参考。
  • 所需E币: 3
    时间: 2019-8-6 17:33
    大小: 371.85KB
    上传者: bambooslip
    PythonPEP8编码规范中文版
  • 所需E币: 3
    时间: 2019-8-6 17:36
    大小: 10.89KB
    上传者: bambooslip
    PYTHONQTGUI快速编程PYQT编程指南
  • 所需E币: 3
    时间: 2019-8-6 17:38
    大小: 13.15MB
    上传者: bambooslip
    Python实战-从菜鸟到大牛的进阶之路
  • 所需E币: 3
    时间: 2019-8-6 17:22
    大小: 6.18MB
    上传者: bambooslip
    本书的内容主要来自CPyUG社区的邮件列表,由Python的行者根据自身经验组织而成,是为从来没有听说过Python的其他语言程序员准备的一份实用的导学性质的书。笔者试图将优化后的学习体验,通过故事的方式传达给读者,同时也分享了蟒样(Pythonic式)的知识获取技巧,而且希望将最常用的代码和思路,通过作弊条(CheatSheet,提示表单)的形式分享给有初步基础的Python用户,来帮助大家多快好省地完成功能。本书期望成为学习使用Python的同好们的沟通话题,引发进一步的学习/应用/创造/推广,就是笔者的追求!因为Python语言本身是种非常灵活的动态脚本语言,同一个目标可以使用多种方式完成,笔者为了让拥有各种不同技术背景的读者可以快速无碍地理解,选择了一种实际上可能比较笨拙的方式来实现功能,聪明的读者一定可以看出来的,那么请会心一笑,因为您已经和我们心灵相通了!
  • 所需E币: 3
    时间: 2019-8-6 17:18
    大小: 11.68MB
    上传者: bambooslip
    OReilly.-.PythonforDataAnalysis
  • 所需E币: 3
    时间: 2019-8-6 16:30
    大小: 10.89KB
    上传者: bambooslip
    本书介绍了如何利用Python3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、BeautifulSoup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,后介绍了pyspider框架、Scrapy框架和分布式爬虫。本书适合Python程序员阅读。
  • 所需E币: 3
    时间: 2019-8-6 16:33
    大小: 26.47MB
    上传者: bambooslip
    《Python程序设计第3版》是面向大学计算机科学专业的教材。本书以Python语言为工具,采用相当传统的方法,强调解决问题、设计和编程是计算机科学的核心技能。全书共13章,此外,还包含两个附录。第1章到第5章介绍计算机与程序、编写简单程序、数字计算、对象和图形、字符串处理等基础知识。第6章到第8章介绍函数、判断结构、循环结构和布尔值等话题。第9章到第13章着重介绍一些较为高档的程序设计方法,包括模拟与设计、类、数据集合、面向对象设计、算法设计与递归等。附录部分给出了Python快速参考和术语表。每一章的末尾配有丰富的练习,包括复习问题、讨论和编程联系等多种形式,帮助读者巩固该章的知识和技能。《Python程序设计第3版》特色鲜明、示例生动有趣、内容易读易学,适合Python入门程序员阅读,也适合高校计算机专业的教师和学生参考。
  • 所需E币: 3
    时间: 2019-8-6 16:37
    大小: 10.89KB
    上传者: bambooslip
    Python是目前最流行的动态脚本语言之一。本书共27章,由浅入深、全面系统地介绍了利用Python语言进行程序开发的知识和技巧,包括Python的安装和环境配置、Python的基本语法、模块和函数、内置数据结构、字符串和文件的处理、正则表达式的使用、异常的捕获和处理、面向对象的语言特性和设计、Python的数据库编程、wxPython库的使用、HTML应用、XML应用、Django网页开发框架的使用方法、测试驱动开发模式应用、Python进程和线程、Python系统管理、网络模块、Python图像处理和游戏开发、Python扩展和嵌入以及Windows下的Python开发等。为了便于读者学习,本书每个章节都提供了详尽的例子,结合实例讲解各个知识点。.本书适合Python爱好者、大中专院校的学生、社会培训班的学生以及用Python语言进行系统管理、GUI开发、Web开发、数据库编程、网络编程的人员使用。
  • 所需E币: 3
    时间: 2019-8-6 16:08
    大小: 7.85MB
    上传者: bambooslip
    很全的Python学习资料。
  • 所需E币: 3
    时间: 2019-8-6 16:16
    大小: 10.9KB
    上传者: bambooslip
    《零起点Python机器学习快速入门》采用独创的黑箱模式,MBA案例教学机制,结合一线实战案例,介绍Sklearn人工智能模块库和常用的机器学习算法。《零起点Python机器学习快速入门》中配备大量图表说明,没有枯燥的数学公式,只要懂Word、Excel,就能够轻松阅读全书,并学习使用书中的知识,分析大数据。《零起点Python机器学习快速入门》具有以下特色:独创的黑箱教学模式,《零起点Python机器学习快速入门》无任何抽象理论和深奥的数学公式。首次系统化融合Sklearn人工智能软件和Pandas数据分析软件,不用再直接使用复杂的Numpy数学矩阵模块。系统化的Sklearn函数API接口中文文档,可作为案头工具书随时查阅。基于Sklearn+Pandas架构,全程采用MBA案例模式,无需任何理论基础,懂Excel就可看懂。
  • 所需E币: 3
    时间: 2019-8-6 16:18
    大小: 32.63MB
    上传者: bambooslip
    Hands-OnTransferLearningwithPython.
广告