编程

学习用Python编程时要避免的3个错误

当你做错事时,承认错误并不是一件容易的事,但是犯错是任何学习过程中的一部分,无论是学习走路,还是学习一种新的编程语言都是这样,比如学习 Python。

为了让初学 Python 的程序员避免犯同样的错误,以下列出了我学习 Python 时犯的三种错误。这些错误要么是我长期以来经常犯的,要么是造成了需要几个小时解决的麻烦。

年轻的程序员们可要注意了,这些错误是会浪费一下午的!

1、 可变数据类型作为函数定义中的默认参数

这似乎是对的?你写了一个小函数,比如,搜索当前页面上的链接,并可选将其附加到另一个提供的列表中。
def search_for_links(page, add_to=[]):
new_links = page.search_for_links()
add_to.extend(new_links)
return add_to

从表面看,这像是十分正常的 Python 代码,事实上它也是,而且是可以运行的。但是,这里有个问题。如果我们给 add_to 参数提供了一个列表,它将按照我们预期的那样工作。但是,如果我们让它使用默认值,就会出现一些神奇的事情。

试试下面的代码:
def fn(var1, var2=[]):
var2.append(var1)
print var2

VDMA从配置到编程

使用Zynq进行视频开发的同学们,基本上会用到VDMA,尤其,HLS自动化IP生成也成为开发的一种方法,最近,通过HLS生成IP,通常AXI-Stream接口,那么就需要VDMA接口进行数据搬移。而这过程中VDMA配置问题将决定调试的效率,下面把分享一下我配置VDMA的经验。

VDMA IP配置

这是基本配置,但也是SDK配置的依据。
Address Width:数据线位宽,一般就配置成32位了,除非数据宽度大于32.

Frame Buffers:帧缓冲数

用来缓冲输入图像的帧缓存数量,最大可以选择32帧,在这里选择3就可以了。

据我所了解这个值一般最小设置为3,因为VDMA有一个读通道,一个写通道,在实际使用时一般都是写完了一帧数据,然后再去读这一帧的数据(VDMA内有一种机制,保证读出的帧总是上一次写完的帧)。这样能够防止读取到的图像被撕裂或者别的情况发生。

Python编程风格

前言

Python语言的编程风格我个人认为还是比较简洁的,如果你之前接触过其他的编程语言,例如C、C++、Java等语言,他们之间我感觉大同小异,不过还是有一些差异的,下面我们就来看下Python的一些基础语法。

python程序

对于python程序的入手,python给我们提供了交互式与脚本式两种学习方式,那么我们先来看一下两种方式:

交互式(linux下shell提示符下输入python)
[root@localhost ~]# python
Python 2.7.12 (default, Aug 8 2016, 09:01:20)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>

在python交互模式下我们来试试打印一个字符
>>> print "hello world"
hello world

脚本式

Python编程风格

大多数语言可以写(格式化)作几种不同的风格。有些比其它的更好度。让代码对别人更容易读是个好想法,养成良好的编码风格对此很有帮助。

一个高度可读,视觉友好的编码风格如下:

1)使用4空格缩进,而非TAB。在小缩进(可以嵌套更深)和大缩进(更易读)之间,4空格是一个很好的这种。TAB引发了一些混乱,最好弃用。

2)每行以确保其不会超过79个字符。有助于小显示器用户阅读,大显示器并排显示几个代码文件。

3)使用空行分割函数和类,以及函数中的大块代码。

4)可能的话,注释独占一行

5)使用文档字符串

6)把空格放到操作符两边,以及逗号后面,但是括号里侧不加空格。

7)统一函数和类命名。推荐驼峰命名,函数和方法名用小写和下滑线。总是用self作为方法的第一个参数。

8)不要使用花哨的编码,如果你的代码的目的是要国际化环境。python的默认情况下,UTF-8,甚至普通的ASCII总是工作的最好。

9)同样,也不要使用非ASCII字符的标识符,除非是不同语种的会阅读或者维护代码。

参考: http://www.pythondoc.com/pythontutorial27/controlflow.html

作者:阿Q 来源:Digilent中文技术社区

FPGA正在逐渐成为EECS专业的同学们在校期间学习掌握的一项必备技能。无论是在课程实验、竞赛作品、科研项目还是未来求职过程中,拥有FPGA技能包对每一名电类工科生而言都会是一项不小的加分项。

对于想要学习着手开始学习FPGA的童鞋们,我们有一则坏消息和一则好消息。先说坏消息:现今每家FPGA厂商都有其专属的开发工具链,这也意味着要想对不同的FPGA开发板进行编程,你首先得熟悉掌握不同的开发工具链,而这往往并不简单。接下来的好消息你一定会眼前一亮:现在,你可以使用Multisim这一在电路实验中无处不在并广受欢迎的电路搭建与仿真工具来对多款Digilent FPGA开发板进行编程了!是的,你没有听错哦。只需要一些基本的设置,你所熟悉的Multisim就将成为助你探索FPGA奇妙世界的一项利器。

在今天分享的教程中,我们就将手把手一步步教你如何使用Multisim对Digilent FPGA开发板进行编程。如果你有兴趣,赶紧跟着我们一起来操作吧!

1.获取正确的工具
想要使用Multisim来对Digilent FPGA开发板进行编程,你首先得安装一些必要的软件:
● LabVIEW 2014或更新版本
● Multisim 14.0或更新版本

Python机器视觉编程常用数据结构与示例

本文总结了使用Python进行机器视觉(图像处理)编程时常用的数据结构,主要包括以下内容:
数据结构

  • 序列操作:索引(indexing)、分片(slicing)、加(adding)、乘(multipying)等
  • 列表:创建、list函数、基本操作:赋值、删除、分片赋值、插入、排序等
  • 元组:创建、tuple函数、基本操作
  • NumPy数组:创建数组、创建图像、获取形状、维度、元素个数、元素类型、访问像素、通道分离、使用mask
  • 1. 数据结构
    数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构。在Python中最基本的数据结构是序列(sequence)。序列中每个元素被分配一个序号——即元素的位置,也称为索引(index),第一个元素的索引是0,第二个是1,以此类推。

    python包含6种內建序列,最常用的两种类型是:列表和元组。列表和元组的主要区别在于列表可以修改,元组不可以修改。而用于处理图像的基本数据结构是数组,由于Python标准库中的內建数组只能处理一维数组并且提供的功能较少,因此做编程时常使用NumPy模块的array()数组表示图像,并进行各类处理。

    2. 通用序列操作

    NI LabVIEW中的多种编程方法

    NI LabVIEW是一类图形化数据流编程环境。 使用LabVIEW中的数据流时,您能通过创建展现数据如何在函数(所知的虚拟仪器,或称VI)间移动的程序框图,界定代码中的执行流程。 然而,借助LabVIEW,您能够在单一应用程序中结合除了图形数据流(G)之外的更多种类的编程方式。 利用这种灵活性来选用您中意的工具,从而创建算法并且解决各类工程问题。

    定义编程方法
    “编程方法”一词囊括:不同的编程语言、运算模型、抽象级别、与现有代码交互的方式、表示算法的途径。 过去几年,National Instruments在LabVIEW通信中加入多种接口和方法,以提供更多的编程方法。

    您能编写多种方法,并将其作为熟悉的G数据流语言导入相同的程序框图。 LabVIEW编译所有这些针对合适硬件对象的方式;这些硬件对象的范围涵盖:台式计算机、实时操作系统、现场可编程门阵列(FPGA)、移动设备和嵌入式处理器(如:ARM)。

    SDAccel突破编程局限 实现FPGA应用加速

    近年来,云计算和大数据应用呈爆发式增长,在推动数据中心产业升级的同时,也为数据中心的应用开发与运行维护带来了一系列问题。目前,数据中心运维人员主要通过易于编程的多核CPU和GPU来开发应用,但CPU 和GPU 都遇到了单位功耗性能的瓶颈壁垒。而从事海量数据中心应用开发(如密钥加速、图像识别、语音转录、加密和文本搜索等)的设计人员则既希望GPU 易于编程,同时又希望硬件具有低功耗、高吞吐量和最低时延功能。然而,多核CPU和GPU 加速器在可扩展性上存在严重的问题,即客户希望用简单的全高度插入式PCIe 开发板作为数据中心服务器的应用加速器。这种开发板经配置可运行高功率图形卡,但客户同时希望功耗不超过25W,以便最大化可扩展性并最小化总功耗。

    Xilinx FPGA编程技巧之常用时序约束详解

    1. 基本的约束方法
    为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取。最普遍的三种路径为:
    . 输入路径(Input Path),使用输入约束
    . 寄存器到寄存器路径(Register-to-Register Path),使用周期约束
    . 输出路径(Output Path),使用输出约束
    . 具体的异常路径(Path specific exceptions),使用虚假路径、多周期路径约束

    Multisim 11.0.1软件进一步提升了可编程逻辑器件(PLD)原理图设计仿真与硬件实现一体化融合的性能。这个最新版本的Multisim使您能够在Multisim设计环境下,直接对您的Xilinx逻辑器件进行编程。这将使得理论概念与硬件实现之间的关系从未变得如此简单。

    同步内容