我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++程序员Python notes

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++程序员Python notes

参考http://blog.chinaunix.net/uid/20039893/frmd/49956.html及其他一些网上资料,C++程序员的Python入门。

1. important getchas:
    judge whether a object is a type
    type(object) == type(str())
    或
    from types import StringTypes
    type(object) == types.StringType    #记得要import types
    或if isinstance(obj, StringTypes):
    与系统定义的单值比较尽量使用is,虽然使用==能使用同样功能但效率差许多,因为一个是直接比较一个需要调用其比较函数,老外曾经测试过。如if x is None,if x is not None,不要if x == None。is的非形式为is not。
    所有的控制语句需要用':'换行,定义函数同样,切记,Python中的一切都是对象,包括函数。
    尽量使用xrange代替range,range直接生成指定大小的list,而xrange只是生成一个对象而在需要时才产生下一个值,这可以节省非常多的内存,对于足够大的值使用range可能造成内存不足。
    编码规范:类名首字母大写,e.g. ,Dog,变量和函数名__开头为私有,尽量只将函数暴露给外部,变量命名小写加_即可,同Linux。某些时候和系统的命名冲突可以_结尾,如_china_。
http://www.cnblogs.com/kym/archive/2011/03/17/1986640.html

2. itertools模块对迭代和组合非常有效,比如
    import itertools
    iter = itertools.permutations([1, 2, 3])
    lst = list(iter)    #此时lst为[1, 2, 3]的全排列

3. 数组即list,下标中的冒号表示到XX为止或以XX开始
    string中单个item是不可修改的,故不可使用str_test[5] = 'm'来修改一个字节
    正确的方式是str_test = str_test[4:] + 'm' + str_test[:6]
    但这种方法会多次拷贝字符串造成效率较低,故较好的方法是先用list存储之后再转
    其长度并非list.len而是len(list)

4. sequence类型的slice详解,比如string、list、tuple
    1)+不能用来连接一个字符串和数字,因为其也数字加法运算符
    2)[1:4:2]除起始两个值代表起始和结束位置外,最后一个代表步进值

5. Python数据类型分类
    number
    sequence: string(不可变)、list、tuple(不可变)
    mapping: dictionary,类似stl中的map
    可变和不可变类似于c++中的const,即一旦定义后不许改变其值。
    number支持各种算术运算。
    string是顺序的,不可变的。
    list是顺序的,可变的。
    dictrionary是无顺序的,可变的
    tuple是顺序的,不可变的。
    str() list() dict() tuple()这几内置函数分别用于构造相应的类型。

6. list
    特点:有序、可变
    可直接使用list将序列构造一个list,如:test_list = list('china')
    修改时可直接以slice为单位,且不要求被替换的内容与新内容长度相同,故修改后可能list的长度会改变,如:test_list[4:6] = ['n', 'a', 'm', 'mddd']或test_list[4:] = ['e']
    注意list中的count并非其中的元素个数,而是给定的value在list中出现的次数
    其他如下:

  1. >>> L.append(4)  #只能一次添加一个object,不能用于两个sequence连接,因为新sequence将会被作为一个object添加进去
  2. >>> L
  3.     [0, 1, 2, 3, 4]
  4. >>> L.extend([5, 6])  #参数为一个sequence,直接添加到其末尾
  5. >>> L
  6.     [0, 1, 2, 3, 4, 5, 6]
  7. >>> L = L + [7]  #可为sequence或object,与前面的区别是会新构造一个对象,故需要重新赋值,至于+=是否会被当作append或extend处理目前并未有相关资料,如果作者有注意到的话应该会做此类优化
  8. >>> L
  9.     [0, 1, 2, 3, 4, 5, 6, 7]

7. dictionary
    初始化方式为test_dic = {1:'one', 2:'two}
    可以使用items()导出到list, test_list = test_dic.items(),将会得到一个类似[(1, 'one'), (2, 'two')]的list。
    可以使用fromkeys()从list导入key,value将以None填充,如:
    test_list = [1, 2, 3, 4]
    test_dic.fromkeys(test_list)
    for x in test_dic会遍历test_dic,默认遍历key,使用test_dic的iterkeys()、itervalues()、iteritems()可以分别得到遍历key、value和item的iterator。

8. tuple
    test_tuple = (1, 3, 4)
    可将tuple理解成const的list,但其成员的成员是可变,即其某一位置必须指向某一对象不可再指向另一对象,但该对象本身是可变的。
    注意当只有一个初始成员时需要在初始化末尾加',',如:
    test_tuple = (1, )
    否则将会被初始化为整型。

9. 查找一个值是否在容器中要用in而不是用index然后去检查其返回值是不是>0...

10. print a, b, c,    print会自动在每个变量后加一个空格,最后以逗号结尾可以防止调用print结束会自动附加的\n换行符
    print >> object, x, y    将x,y出到object的write方法中,该ojbect必须有些方法哦
    Python中print为以下语句的简写
    import sys
    sys.stdout.write(str(x) + '\n')
    故可通过将stdout重定向而实现print的输出重定向功能
    import sys
    fp = file('log.txt', 'a')
    sys.stdout = fp
    print 'hello world! heihei'
    sys.stdout = sys.__stdout__    # reset to default

11. 语句和语法
    Python要写超过一行的语句,需要一对符号的语句或者在前一行后加上'\',与C相同,第二种不推荐,因为任何第二种的情况都可使用()来代替
    Python中的switch/case可用多个if/elif/else代替,或者个人感觉可以使用dictionary结合lambda表达式,如:
    choice = 'inc'
    g = {'inc' : lambda x: x + 1,
     'dec' : lambda x: x - 1}
    g[choice](x)
    Python中的while和for都可带else子句,注意break是不会跳到else中的,只有循环的判断表达式为False方可。

12. map(function, seq1, seq2, ...) 对seq列表中的所有的的seq每项依次调用function,将其返回值构建列表,如果functon为None则直接返回seq中的值
    map(lambda x, y: y / x, time, ratio)    #每个时刻点的平均ratio

13. zip就是把2个数组糅在一起
x=[1, 2, 3, 4, 5 ]
y=[6, 7, 8, 9, 10]
zip(x, y)就得到了
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
比如你有2组坐标,你想两两对应的相加,那么zip函数就很有用了。
再比如,你有2个数组A,B,A存了班级里的人的名字,B是每个人的考试分数,你需要通过某个人的名字来查考试分数,那你需要一个字典,zip可以很方便地帮你建立字典:
>>> x=['bob','tom','kitty']
>>> y=[80,90,95]
>>>d=dict(zip(x,y))
[('bob', 80), ('tom', 90), ('kitty', 95)]
>>> d['bob']
返回80,多方便啊

14. 在Python中所有的都是对象,函数也不例外。
    def定义一个函数对象,定义的对象可赋值,lambda函数同理。

  1. if x ==0:
  2.     def npower(n): x**2
  3. else:
  4.     def npower(n): x**3
  5. nload = npower
  6. nload(5)
  7. L = [npower, nload]

15. 命名空间
第一,赋值(包括显式赋值和隐式赋值)产生标识符,赋值的地点决定标识符所处的命名空间。
第二,函数定义(包括def和lambda)产生新的命名空间。
第三,python搜索一个标识符的顺序是"LEGB"。
所谓的"LEGB"是python中四层命名空间的英文名字首字母的缩写。最里面的一层是L(local),表示在一个函数定义中,而且在这个函数里面没有再包含函数的定义。第二层E(enclosing function),表示在一个函数定义中,但这个函数里面还包含有函数的定义,其实L层和E层只是相对的。第三层G(global),是指一个模块的命名空间,也就是说在一个.py文件中定义的标识符,但不在一个函数中。第四层B(builtin),是指python解释器启动时就已经具有的命名空间,之所以叫builtin是因为在python解释器启动时会自动载入__builtin__模块,这个模块中的list、str等内置函数的就处于B层的命名空间中。
其实只要在编程的时候注意一下,不要使用相同的标识符,基本上就可以避免任何与命名空间相关的问题。还有就是在一个函数中尽量不要使用上层命名空间中的标识符,如果一定要用,也最好使用参数传递的方式进行,这样有利于保持函数的独立性。

16. 函数传参方式
关键字赋值法:不像C/C++,形参的顺序是可根据传参顺序改变,如:F(arg2 = 2, arg1 = 1)
F(arg1,arg2,...)
F(arg2=<value>,arg3=<value>...)    #带默认值的函数定义,如果需要用到默认值的参数在前面,则使用关键字赋值法
F(*arg1)    #参数不管多少个都被存放在以形参名为标识符的tuple中
F(**arg1)    #参数不管多少个都被存放在以形参名为标识符的dictionary中,调用时需要采用F(x = 1, y = 2)类似的形式, 则arg1 = {('x' : 1), ('y' : 2)}

17. lambda函数
与C++不同,lambda在Python中只能是一行,可以使用';',但不能使用for/while/if,虽然使用某些技巧可以实现但不推荐,系统自带的map/reduce/filter等函数比较好用。
lambda x, y: x + y; print x, y; x + y + 1

18. 类相关
__init__(self)    类的构造函数,如果传参可写为__init__(self, arg1, arg2...),类似于c++中的bind。
__del__(self)    类的析构函数
__call__(self, arg1, ...)  类似于C++中的重载括号运算符
类中的权限完全根据_和__来区分,即直接命名的为public函数
派生类需要手动调用基类的__init__,否则继承将不起作用

class Animal(object):
    name = 'unname' # member varieble
 
    def __init__(self, voice = 'hello', name = 'default'):
        self.voice = voice
        print 'animal::__init__, name: ', name
 
    def __call__(self, voice)
        self.voice = voice
 
    def say(self):
        print self.voice
        print self.name
 
class Dog(Animal):
    def __init__(self):
        #Animal.__init__(self)    # 手动调用
        super(Dog, self).__init__()    #代替上面的写法
        self.dogName = 'dogName'
 
Dog d
d('wangwang')    # invoke __call__
d.say()

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++程序员Python notes

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++程序员Python notes

参考http://blog.chinaunix.net/uid/20039893/frmd/49956.html及其他一些网上资料,C++程序员的Python入门。 1. important getchas:     judge whe
2023-01-31

非程序员选择学习C++还是Python?

  非程序员选择C++还是Python?编程语言是当下非常热门的技术,也是非常具有发展前景的行业,广受大家喜欢。不过在考虑学习编程的时候,很多人都会疑惑学习Python还是C++?为大家介绍一下。  首先,对于非程序员职场人员来说,当前情况
2023-06-01

好程序员Python培训分享Python程序员面试技巧

  好程序员Python培训分享Python程序员面试技巧,往年的这个时候,“金三银四”的招聘热潮已经扑面而至。今年,因为疫情的影响,各大公司的社招可能跟“2002的第一场雪”一样,比以往时候来得更晚一些。当然,对于计划在年后找工作或者跳槽
2023-06-01

写给 python 程序员的 OpenG

文章目录1 预备知识1.1 坐标系1.2 投影1.3 视景体1.4 视口1.5 视点1.6 OpenGL 变换2 安装 pyopengl3 OpenGL 库及函数简介3.1 OpenGL 核心库 GL3.2 OpenGL 实用库 GLU3.
2023-01-31

用python完成程序员的表白

程序员的520怎么表白照片墙TODO爱心情书TODO原文地址: https://github.com/HeLiangHIT/coders_love照片墙依赖: pip install Image clize使用: python pictur
2023-01-31

是程序员,就用python导出pdf

这两天一直在做课件,我个人一直不太喜欢PPT这个东西……能不用就不用,我个人特别崇尚极简风。谁让我们是程序员呢,所以就爱上了Jupyter写课件,讲道理markdown也是个非常不错的写书格式啊。安装Jupyter其实非常简单,你会pyth
2023-01-31

C++程序员眼中的app.js是怎样的

这篇文章主要介绍“C++程序员眼中的app.js是怎样的”,在日常操作中,相信很多人在C++程序员眼中的app.js是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++程序员眼中的app.js是怎样的
2023-06-19

十个Python程序员易犯的错误

常见错误1:错误地将表达式作为函数的默认参数 在Python中,我们可以为函数的某个参数设置默认值,使该参数成为可选参数。虽然这是一个很好的语言特性,但是当默认值是可变类型时,也会导致一些令人困惑的情况。我们来看看下面这个Python函数定
2022-06-04

黑马程序员2017年12月python视

所属网站分类: 资源下载 > python视频教程作者:dgfv链接: http://www.pythonheidong.com/blog/article/467/来源:python黑洞网 www.pythonheidong.com 黑马程
2023-01-31

C++程序员如何操作文件对话框

今天小编给大家分享一下C++程序员如何操作文件对话框的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、调用GetOpenFi
2023-06-30

C++程序员应聘常见面试题有哪些

本篇内容主要讲解“C++程序员应聘常见面试题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++程序员应聘常见面试题有哪些”吧!试题1:以下是引用片段: void test1() {
2023-06-17

程序员怎么报名?软考程序员报名流程简介

  程序员怎么报名?软考程序员报名流程有哪些?程序员报名采用线上报名的方式,报名网站为中国计算机技术职业资格网,软考程序员报名流程详见正文。  程序员报名采用线上报名的方式,报名网站为中国计算机技术职业资格网,网站网址:https://www.ruankao.org.cn/。软考程序员报名考生在规定的时间登录该网站,点
程序员怎么报名?软考程序员报名流程简介
2024-04-19

程序员考什么

  软考程序员包含两个考试科目,各科目考试形式都是笔试。程序员各科目满分均为75分,考试时间分别安排在上午和下午,上午考试题型和下午考试题型有所不同。  软考程序员包含基础知识和应用技术两个科目,各科目的考试形式都是笔试。  软考初级(信息处理技术员除外)、中级的基础知识科目和软考高级的综合知识科目都是安排在上午考试,
程序员考什么
2024-04-18

所有 Python 程序员必须要学会的「

本文字数:3840 字阅读本文大概需要:10 分钟写在之前在我们的现实生活中,「日志记录」其实是一件非常重要的事情,比如银行的转账记录,汽车的行车记录仪记录行驶过程中的一切,如果出现了什么问题,我们可以通过「日志记录」来搞清楚到底发生了什么
2023-01-30

Python程序员需要会用库是什么

这篇文章主要为大家展示了“Python程序员需要会用库是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python程序员需要会用库是什么”这篇文章吧。这就提出了一个问题:在 Python 中
2023-06-17

Python程序员常见的问题有哪些

这篇文章主要讲解了“Python程序员常见的问题有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序员常见的问题有哪些”吧!语用错误让我们从基础开始,从那些刚学习编程的人钻研
2023-06-27

Python程序员的不良编程习惯有哪些

这篇文章主要讲解了“Python程序员的不良编程习惯有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python程序员的不良编程习惯有哪些”吧!编程习惯No. 1:使用goto关于禁止使
2023-06-02

Linux 程序员失业

这期内容当中小编将会给大家带来有关Linux 程序员失业,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。有多少人期待过像贾维斯一样的强人工智能?尽管老实说看当下的技术离这一期待还很遥远,但用用类似 GPT-
2023-06-15

程序员考几门?软考初级程序员考试科目

程序员考几门?软考初级程序员考试科目有哪些?软考初级程序员考试科目有2个,一个是基础知识,题型为单选题,另一个是应用技术,两个科目的满分均为75分。
程序员考几门?软考初级程序员考试科目
2024-07-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录