Python概述:C++程序员眼中的Python


    在C++的程序员眼中,脚本是个奇葩的逻辑。当然也可能我比较奇葩。不过从Lua走过来,python的理解也不那么难。记录一下刚学python要注意的东西,也算是个快速入门吧。如果你是从C++过来的,那你来对地方了。

避免运行脚本闪过可以添加raw_input()。这相当于getline。
在命令行中可以直接键入filename.py来运行脚本。
导入模块用import moduleName。注意没有.py。然后使用moduleName.attr即可使用相应的属性。也可使用from module import attr命令,如此做则可直接使用属性。第一次导入模块时会运行脚本,但第二次导入不会。用reload可以重写导入模块,并运行模块。
交互模式下使用dir(moduleName)可以列出模块中的属性名称。

Python内置对象
数字:
  **表示乘方。
import math导入数学库,可使用pi、sqrt等常用方法。

import random 导入随机数库。
    使用random.random()产生0-1的随机数。也可random.choice([1,2,3,4]),在列表中选择。 
    random.int(1,10),在1到10中产生随机数。
字符串:
    字符串是常量,不可更改,只能重新赋值。
    len()计算长度。支持下标随机访问。
    可以用s[-1]的方式表示倒数,其等效于s[len(s)-1]。
    拆分字符串用分片(slice)机制。 
        形式为X[I:J]。表示取出X中从I到J的内容,左开右闭。
        如果I、J空出来,则分别表示0和len(X)。当然I、J可为负数。

    字符串连接可以用'+',例如:S = S +'a'。此时S已经创建了一个新对象了。
    字符串查找使用find(),返回偏移量位置。
    字符串替换使用replace返回替换后的串。
    字符串的split使用split函数。分成的结果存入一个列表。
    字符串有基本操作的一些方法,如:upper、isalpha、rstrip等。
    三引号可定义一段复杂文本。这些文字会被转化为相应的串,包含制表符等符号。同时也可用作注释,相当于/***/

帮助:
    dir(变量)的方法可以列出对象的所有属性和方法。具体方法的解释可使用help命令。例如:help(S.index)。

模式匹配:
    import re。具体涉及正则表达式,再查吧。

列表:
    列表能够进行索引,切片等操作,像对字符串一样。例如用[:]、[-1]等。
    列表与数组有些类似,但强大的多。列表没有固定类型的约束,也能按需要增减大小,响应特定操作。有操作如:append、pop、'+'、sort、reverse。
    列表解析通过在一个列表中运行一个表达式而建立一个新的列表。它编写在方括号中,并且有表达式和循环结构。有点像是sql语句。形如:
        [func(value) for value in list [statment]]
    这条语句会将每一个list中的元素赋值给value,检查statment中条件是否符合,然后运行func(value),将其值创建为新列表中的一个项。例如:[row[1] for row in M if row[1]%2 == 0]。

字典:
    表示方法为{key:value,key:value...}。
    value可以是任何数据类型比如列表。内存是自动管理的,不需要释放。
    字典的输出并不是有序的,我推测内部实现方法是树。
    固定顺序输出可先将键排序,再用for key in Keys: 的方法。或直接用sorted()方法。例如:for key in sorted(D): 。

可以通过.has_key判断是否有对应的键。

元组:
不能更改,其它跟列表相似。

文件:
open(filename,weight)。默认权限为'r',创建或打开文件。write()写入文件。read()读出文件内容。注意只能读一次。

python中,按算符的优先级确定计算顺序。表的操作符中越靠后的优先级越高。当然还是提倡使用括号。

Floor除法。抛弃小数部分之后的除值,即%的商的部分。

python中长整形任意大。当长度超过int时,会自动转换为长整形。

支持位操作。八进制数以0开头,16进制以0x开头。oct(num)、hex(num)、int()可以对数字进行转换。


脚本动态对象实现逻辑:
每一个声明出的变量名并没有实际的类型,变量名是一个void指针,指向对象。另一方面,对象知道自己的类型,每个对象都包含了一个头部信息,标记了这个对象的类型。赋值有三个操作:创建一个对象、创建一个变量、将变量与对象连接。
Python概述:C++程序员眼中的Python
     当变量名指向新对象时,旧对象内存就被回收(这要是能不慢都见鬼了)。

 
    变量不能指向变量。只能指向对象。因此当两个变量之间赋值时,实际意思是要保持一致。他们实际上共享了对象。这样就不会存在内存访问的问题,代价就是效率低到爆。当原变量更改而不是对象更改时,会产生分歧。因此对于列表L2=L1,当L1中的值改变时,对象变了,变量并没有变,所以L2的值也会变化,如果你不希望这样可以简单的使用分片技术:L2 = L1[:]。如果是字典的话,就要import copy,使用copy.copy()函数了。

    使用"=="操作符,测试两个被引用的对象是否值相同。"is"操作符,检查对象是否指向同一对象。注意小的数字和字符串是在缓存中被复用的。因此is判断会为真。

大概就写这些,以后可能在这里再增加。有必要也会新写一篇,欢迎大家关注。

本篇博客出自阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/8986698


 

原文链接: https://www.cnblogs.com/javawebsoa/archive/2013/05/28/3105082.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    Python概述:C++程序员眼中的Python

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/90312

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午12:35
下一篇 2023年2月10日 上午12:35

相关推荐