Python3 学习之路(4) 字符串

字符串

在Python3中,字符串在内存中的存储格式均是Unicode。且其实不存在单个字符,单个字符也被视为字符串。

编码与解码

对于许多编程语言来说,字符串的各类编码是一个很让人难以处理的问题,在Python中,用了很好的封装方式,字符串的编码与解码不再是令人头疼的问题。

encode()

python使用encode()方法来进行字符串的编码。这个方法将一个字符串编码成指定编码格式,返回值是bytes类型。

1
bytes_string = '中文'.encode('utf-8')

如果你对含有超出ASCII编码外的字符(比如说,中文)的字符串编码为ASCII,则Python会报错,解决方法是告知Python如何进行处理。

1
bytes_string = '中文CN'.encode('ascii',errors='ignore')

这里我将encode()中errors参数的值设置为’ignore’,即对错误的字节进行忽略,返回值为ASCII编码的bytes,意为CN。

decode()

python使用decode()方法来进行字符串的编码。这个方法将一个bytes根据指定编码格式进行解码,返回值是一个字符串。

1
string = b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

如果进行上面的encode()实验,很容易知道这里的b’\xe4\xb8\xad\xe6\x96\x87’是UTF-8编码格式下的’中文’,这里相当于上面的逆过程。

同样的,如果bytes里有含有超出指定编码外的字符,Python也会报错,解决方法也是同样告知如何进行处理。

转义字符表

转义字符 描述
(在行尾时) 续行符
\ 反斜杠符号
\\’ 单引号
\\” 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy代表的字符,例如:\o12代表换行
\xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

字符串运算符

下表实例变量a值为字符串 “Hello”,b变量值为 “Python”:

操作符 描述 实例
+ 字符串连接 a + b 输出结果: HelloPython
* 重复输出字符串 a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符 a[1] 输出结果 e
[ : ] 截取字符串中的一部分 a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 True ‘H’ in a 输出结果 True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True ‘M’ not in a 输出结果 True

格式化字符串

Python支持格式化字符串的输出,语法与C语言的printf()函数基本相同。

python字符串格式化符号:

符号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号 功能
* 定义宽度或者小数点精度
- 用做左对齐
+ 在正数前面显示加号( + )
# 在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0 显示的数字前面填充’0’而不是默认的空格
% ‘%%’输出一个单一的’%’
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

样例如下:

1
2
3
4
5
print('%c' % 'a') #输出一个字符,如果不是字符会报错 
print('%x' % 16) #16进制下的16,没有前缀表明进制
print('%04d' % 20) #输出占位4格的数字,未满4位前补0
print('%+-4d' % 20) #左对齐的,在正数前面补'+'号的占位4格的数字
print('%10.6f' % 12.98765) #占位10格(包括'.'),小数点后至少6位的数字

format

Python2.6开始支持使用format()函数来格式化字符串。

1
print('{0:4d}-{1:02d}-{2:d}'.format(1926,8,17)) #输出 1926-08-17

字符串内建函数

capitalize()

将字符串的第一个字符转换为大写

1
2
3
4
str1 = 'hello world' 
print(str1.capitalize()) # 返回 Hello world
str2 = '123hello world'
print(str2.capitalize()) # 返回 123hello world

center(width, fillchar)

返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。

count(str, beg= 0,end=len(string))

返回 str 在字符串里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数。

1
2
str = 'where which why who when' 
print(str.count('wh')) #返回5

startswith/endswith(suffix, beg=0, end=len(string))

检查字符串是否以suffix开始/结束,如果beg或者end指定则检查指定的范围内是否以suffix开始/结束,如果是,返回True,否则返回False。

expandtabs(tabsize=8)

把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。

find(str, beg=0 end=len(string))

检测str是否包含在字符串中,如果指定范围beg和end,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1。

index(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在字符串中会报一个异常。

isalnum()

如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。

isalpha()

如果字符串至少有一个字符并且所有字符都是字母则返回True,否则返回False。

isdigit() isdecimal() isnumeric()

如果字符串只包含数字则返回True,否则返回False。

这三个在细节上有很多不同的地方,具体请参照引用3的博文,这里只给出结论。

  • isdigit()
    True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字(英文)
    False: 汉字数字、罗马数字
    Error: 无
  • isdecimal()
    True: Unicode数字,全角数字(双字节)
    False: 罗马数字(英文),汉字数字,罗马数字
    Error: byte数字(单字节)
  • isnumeric()
    True: Unicode数字,全角数字(双字节),罗马数字(英文),汉字数字、罗马数字
    False: 无
    Error: byte数字(单字节)

isspace()

如果字符串中只包含空白,则返回True,否则返回False。

join(seq)

以指定字符串作为分隔符,传入的参数,迭代器seq中的所有变量的字符串表示合并为一个字符串返回。

1
2
seq = '-' 
print(seq.join( ('A','B','C') )) #返回A-B-C

len(string)

返回字符串长度。

ljust(width[, fillchar])

返回一个原字符串左对齐,并使用fillchar填充至长度width的新字符串,fillchar默认为空格。

lower()

转换字符串中所有大写字符为小写。

replace(old, new [, max])

把将目标字符串中的old子串替换成new子串,如果max指定,则替换不超过max次。

split(str=” “, num=string.count(str))

num=string.count(str)) 以str为分隔符截取字符串,如果num有指定值,则仅截取num个子字符串。
这个的默认.split()意即按空格截取字符串。

splitlines(keepends=False)

返回字符串的行数,按照换行符切割目标字符串。
如果没设定keepends=True,则会将换行符从返回的字符串组中移除。


引用

  1. http://www.runoob.com/python3/python3-string.html
  2. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431664106267f12e9bef7ee14cf6a8776a479bdec9b9000
  3. https://www.cnblogs.com/jebeljebel/p/4006433.html

美文系列:滕王阁序(2)

本文系转载,已征得原文作者同意,特此声明。
原文作者:海上钢琴师
原文链接:http://www.acfun.cn/a/ac4162716


时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿。临帝子之长洲,得仙人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。

披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰迷津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨,雁阵惊寒,声断衡阳之浦。

第二三段在有些书上会合并为一段,总体来说是写景。开篇之后,既然背景已经交代清楚,那就要先从客观角度出发,来描绘这场盛会、这座楼阁了。从文字角度而言,这是全篇中最为华彩的一段,其中的几段名句,更是垂千古而不朽。

时维九月,序属三秋。

开始一句,就点名了现在的具体时间——农历九月,也就是所谓的三秋时节。按照古代农历,七八九月为秋季,三秋已经是秋天的最末,眼看就要进入冬天了。如果是在王勃的故乡山西,这时候已经是“秋风萧瑟天气凉,草木摇落露为霜”的时候了吧。

但江南气候毕竟更加温和。“青山隐隐水迢迢,秋尽江南草未凋”,这时候的南昌城,草木还没有凋零,气候不冷不热,鱼蟹肥美,新酒方熟,正是舒适惬意的季节,最适合好友齐聚、登楼远眺、把酒临风,尽情抒发自己的胸怀。

潦水尽而寒潭清,烟光凝而暮山紫。

秋天的空气和夏天不同。夏季的空气闷热潮湿,远处的山峦都朦胧在水汽之中,看不清楚。丰沛的雨水让山上满是临时诞生的小溪,夹杂着落叶潺潺而下,让山脚下的潭水都变得有些浑浊了。

但随着秋意的浸染,这些小溪逐渐消失,山下的潭水越发的青碧深幽,仿佛是一面碧玉磨成的镜子一样。天高气爽,笼罩着山川的水气消散了,一眼看去,山峦的形状一览无遗,山上的秋叶在夕阳映照下,显得分外红艳。

古人曾经评论说,这两句“写尽九月之景”,确实如此。呼应前两句对时间的描述,一幅完美的深秋画卷已经展开在我们面前。

俨骖騑于上路,访风景于崇阿。临帝子之长洲,得仙人之旧馆。

前面几句还算是开篇静态画面的话,从这句开始,一幕绝美的电影、一个经典的长镜头开始了——

俨骖騑于上路,骖,是左马;騑,是右马。驾着双马拉的马车,王勃开始了他的旅程。能驾双马的马车,相当于现在年轻人开着一辆超跑,是一件很有格调的事儿。要是开到三驾、四驾的马车,那就是高级别的官员了。

上路,说的不是王勃专门上单,而是呼应前面提到的暮山,指的是山上的路。驾着双马的超跑,从刚才描述的秋山路上驶来,带起一地的红叶……这就是秋名山老司机、社会我王哥啊!

访风景于崇阿,崇阿,指崇山峻岭,这个词大有来历。大家都知道王羲之的《兰亭序》,但兰亭序是什么场合下写的?是王羲之、谢安等一群好哥们一起喝酒赛诗,最后给诗集做的序。只不过这篇序名气太大,以至于大家把后面的几十首诗都忽略了。

但在兰亭会中,主角其实还是这几十首诗。其中被评为当日第一的,是谢安弟弟谢万所写的《兰亭》诗,开头第一句就是“肆眺崇阿,寓目高林”。王羲之在序里说“此地有崇山峻岭,茂林修竹”,呼应的就是这一句。

所以,王哥开着超跑,一路上还在寻花问柳……啊不对,寻访沿途的风景。这一路走着看着,眼前突然出现了一个绝美的去处。

这个去处,就是矗立在赣江江畔的帝子之长洲、天人之旧馆。滕王阁是唐帝国的亲王所建,所以夸一句帝子之长洲,完全没有问题。临字有多种含义,从山上往下望叫临,从外地而来叫临,突然见到这座楼台叫临,靠近水边的沙洲也叫临,但每一个解释都贴合这一句,可谓绝妙。

当时滕王阁修了并没多少年。之所以用旧字,一是惋惜当时修阁的滕王已经不在了,有睹物思人之情;二是将滕王阁比喻为天上仙人的居所,只不过被仙人遗留在此,更是夸耀了滕王阁人间难得的盛景。

把这几句连起来,我们能看到一个年轻人出门上路,寻访名山大川,峰回路转之时,一座江边楼阁出现在他眼前。这座楼阁是如此华美,简直不像是人间的建筑。

既然来到这座仙宫前了,那接下来,肯定是要好好观赏一番:

层峦耸翠,上出重霄;飞阁流丹,下临无地。

走近些看,这座仙宫起伏连绵,屋顶铺着翠绿的琉璃瓦,其高耸之处仿佛直上云霄一般。当年曹操修铜雀台,曹植做赋,其中写到“立中天之华观兮,连飞阁乎西城”,这里的飞阁指的就是那些高高的楼阁之间精细纤巧、涂成朱红色的长桥阁道。一场秋雨洗过,那浓厚鲜亮的颜色仿佛都快要流淌下来一样。楼阁下紧靠大江,看下去都是江水,不见地面,气势恢宏。

远眺之后,就要逐渐走进这座仙宫了:

鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。

宫殿紧靠江畔,殿前的花园和水岸的沙洲结合在一起,走向楼阁的路就在花园里萦回曲折,常有白鹤、鸳鸯等水鸟在路边嬉戏遨游。殿外几树桂花,宫前遍植兰草,自有幽香缭绕在廊庑之间。整座仙宫的构造精巧,宫殿楼阁高低起伏,走势就如同远处的山脉一样。

中国古代造园手法,从唐宋开始真正步入成熟,到明清时达到大成。滕王阁修建于唐初,但从这两句描述中可以看到,当时人们在如何利用自然环境造园、如何借用远处山景和园景融为一体方面,已经很有思路了。

逛完园林,自然就开始登楼:

披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。

绣闼,满是锦绣的门帘。虽然我们现在看那些景点不挂门帘,但古时候这都是人们生活起居的地方,挂门帘才是正常的。雕甍,精雕细琢的屋脊。同为初唐四杰的卢照邻说“双阙连甍垂凤翼”,指的就是唐代这种屋脊宽大、双侧自然下垂的宫殿造型。

登到这座高耸的楼阁上,掀开西侧的锦缎门帘,扑面而来的是一幅壮丽景色。向下看,是矮处殿阁精美灿烂的屋脊。向远处看,是旷阔无际的原野、视野尽头的山峦。旷野之上,河流蜿蜒曲折,湖泊点缀其间,这种自然造物的美令人心醉神迷。

闾阎扑地,钟鸣鼎食之家;舸舰迷津,青雀黄龙之舳。

这句夸景色之美,同时也是夸耀南昌之富庶、宾客之高贵。滕王阁不是远郊外的景点,而是就在南昌城西,背靠雄城,面临大江。从楼上往东望,是鳞次栉比的屋舍。钟是编钟,是古代诸侯贵族宴会时旁边演奏的乐器。鼎是食器,古代诸侯们吃饭,每道菜单独放在一个小鼎里面,至少要有牛羊猪鱼鹿这五鼎食才叫大气上档次。钟鸣鼎食被王勃变成了一个成语,指这些人家都不是普通人家,而是堪比王侯的大富大贵之人。

从楼上往西看,是滔滔的大江。江边停满了各种楼船——相当一部分自然也是楼上宾客们的座驾了。这些大船上有的绘着青雀,有的绘着黄龙,每一条都华美异常。需要注意的是,这里青雀不是简单的雀鸟,而是指传说中西王母驾前的神鸟,所以才能和黄龙所并列。后来李商隐说“蓬山此去无多路,青鸟殷勤为探看”,说的就是这个青雀。

云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。

这时候已经是邻近傍晚了。一场秋雨刚刚结束,乌云散去,澄空如洗,只剩下天边一抹被夕阳映成五彩的云霞。在这云霞的背景之上,一只孤独的鸟儿腾空而起,飞向天际。目光追随着鸟儿远去,她的身影越来越小,最终只看到在遥远的天边,大江和天际都在暮色中变得模糊,最终融合在一起,难分彼此。

这里面有个很有趣的公案。王勃说的是孤鹜,可鹜是什么?是胖胖的水鸟,说好听了叫鸳鸯,说的不好听了叫野鸭子……这鸟都是成群结队活动的,也不善于长距离飞翔。所以为什么是一只孤单的胖野鸭飞过去,大家都很是费解。据说日本收藏的唐代抄本里面写作“孤雾”,但这又完全失去了动态的美感,这解释也不靠谱。

我倒是觉得,王勃当时所形容的,很可能是白鹭、白鹤一类的水鸟。这种鸟身姿纤美,善于飞翔,最是能引发人的诗性。“晴空一鹤排云上,便引诗情到碧霄”,这个解释要更加应景的多。有可能在写的时候,误将鹭写成了鹜,所以才造成了这个误解。

秋水共长天一色,这句里诞生出了水天一色这个成语,将水天之景写到了极致。后来的唐宋诗人们都喜欢写类似的诗句,比如“黄河远上白云间”、“孤帆远影碧空尽,唯见长江天际流”、“水随天去秋无际”、“江流天地外”、“洞庭秋水远连天”、“长江一洗放天青”等等,是诗人们最爱的意象。

这两句一出,文章顿时如同从黑白默片变成彩色电影一样,一下子就活了、就有了颜色,不愧是被传诵不绝的千古名句!据说,闹小脾气的都督阎公听说这个年轻人挥笔写出了这一句时,不由得感叹说:“这是真正的天才啊!”于是赶快下楼和王勃见礼,并且站在他身边看他写完全篇。

渔舟唱晚,响穷彭蠡之滨,雁阵惊寒,声断衡阳之浦。

从艺术角度来说,这一句之美并不亚于上一句。上一句是有色,这一句是有声。承接上一句,当目光已经投向天边,看到茫茫天际时,刚才所见的满眼繁华富贵顿时变的渺小起来。身后酒席上的欢宴喧哗逐渐远去了,此时目光中只有天地,耳边只剩下彭蠡湖畔渔夫归家的歌声、天空中飞过雁群的鸣叫。歌声渐小,雁鸣渐远,画面渐渐变得宁静沉寂。

从出发,到近观,到游园,到登楼,到俯瞰,到远眺,到东西巡视,到随着飞鸟极目天边。这个一气呵成的长镜头带我们饱览了滕王阁景物之壮美,最终归于一片寥廓之中。此情此景之下,我们自然会开始思索一些永恒的问题——天地至大不朽,人类渺小短暂,那我们的存在又有什么意义呢?

这时候,大家也终于意识到,自己正在亲眼见证历史的发生,意识到今日之会,必将因这个年轻人、因这篇雄文而不朽。事实也的确如此。千年之后,滕王阁已经重建了数十次,当年的楼阁是什么样子,阎都督、宇文州牧、孟学士、王将军究竟是谁,早就无人知晓了。但这座楼阁、这些名字已经被牢记在文学史上,只要人类文明还在,就会一直流传下去,得到真正的永生。

开始的嘲弄早已经不在了。所有人都围拢过来,等待着王勃写下新的篇章,等待着自己刚被文字洗礼过的心灵,被重重敲击的那一刻。

美文系列:滕王阁序(3)

本文系转载,已征得原文作者同意,特此声明。
原文作者:海上钢琴师
原文链接:http://www.acfun.cn/a/ac4399635


遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?

嗟乎!时运不齐,命途多舛。冯唐易老,李广难封。屈贾谊于长沙,非无圣主;窜梁鸿于海曲,岂乏明时?所赖君子见机,达人知命。老当益壮,宁移白首之心。穷且益坚,不坠青云之志。酌贪泉而觉爽,处涸辙以犹欢。北海虽赊,扶摇可接;东隅已逝,桑榆非晚。孟尝高洁,空余报国之情;阮籍猖狂,岂效穷途之哭!

三百年前的一个春日,王羲之与谢安等好友会于兰亭。酒至酣处,诗已成章,王羲之提起笔来,准备写一篇序文。文章自然是从这场盛会开始,大家仰观宇宙之大,俯察品类之盛,将视听之娱都享受到了极致,可谓人生至乐。

但接下来,王羲之笔锋一转,开始感慨。这样的至乐转瞬即逝,人生苦短,命运无常。人在志得意满之时,可曾想到老之将至?等看到自己所爱已经逝去,谁又能忍得住自己的悲伤?一代又一代的人们,都在这样的悲苦中辗转零落,这是多么哀痛的事情啊!

三百年后的这个秋天,王勃站在滕王阁上。暮色低垂,四顾茫茫。大江在脚下滔滔而去,一直流向天地的尽头。吾生须臾,大江无穷,以须臾之身临无穷之境,此情此景,是应该悲伤,还是应该喜乐呢?

遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。

和已经老之将至的王羲之不同,王勃此时正是少年意气。凭栏远眺天外,不由觉得胸怀畅快,兴致飞扬。身后的宴席上,细细的箫声传来,和江上的清风一起在身边旋绕。当女孩子们的歌声告一段落时,仿佛天边的白云也凝滞了。

这一点很有趣。面对类似的景色时,不同的人,感慨也是不同的。再过三百年,同样是在大江之上,苏轼和朋友们又是另外的感触。这三位顶尖的人物,有哀伤感怀,有气势昂扬,有遗世独立,但无论是哪一种情感,都是如此的自然,毫无矫揉造作之嫌。

这恰好就是王国维所说的“境界”。“一切景语皆情语。境非独谓景物也,喜怒哀乐,亦人心中之一境界”。境界并非简单的写景,而是写真景色、真感情。山高水长、气象万千,谁又规定了必须发什么样的感慨呢?只要真景色和真感情可以交融在一起,那便是最好的文字了。

睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。

这一句里连用了四个典故。睢园是当年西汉梁王所修建的园林,遍植翠竹,在历史上以梁园雅集而著称。当年汉代最出色的文学家如司马相如、枚乘、严忌等人常常聚会于此,饮酒做赋。李白曾经作梁园诗:“人生达命岂暇愁,且饮美酒登高楼”,说的就是这里。

彭泽是说的历史上另一个文学大家陶渊明,因为他做过彭泽令,所以后世常用彭泽来指代他。陶渊明也酷爱饮酒,给自己作挽歌都要写上“但恨在世时,饮酒不得足”,可见其酒瘾之大。

三国时,曹魏建都于邺城,旁边便是邺水。三曹、建安七子等一众名士曾聚集于邺水之畔的铜雀台上,饮宴作乐。曹植写诗道:“秋兰被长坂,朱华冒绿池。潜鱼跃清波,好鸟鸣高枝”,也是极言欢聚之美。

曹植的文笔,历来为诗家所称道。到了南北朝时,另一位大诗人谢灵运就吹嘘说“天下之才共一石。曹子建独得八斗,我得一斗,天下人共分一斗”。当然,谢灵运可是被李白推崇为“中间小谢又清发”的人,其才华自不必言。谢灵运虽然不是临川人,但做过江西临川的官员,所以临川之笔指的就是他。

多说一句,江西多才子,而临川又是江西之冠。在王勃发出这句感慨后,临川才子便层出不穷,晏殊父子、王安石、曾巩、汤显祖等,无不是中国文学史上的顶尖人物。

这一句中虽然连用了四个典故,但丝毫不觉得晦涩。这四个典故都和良辰美景、主宾欢宴、美酒佳肴、文学大家有关,和今天滕王阁上的聚会有着异曲同工之妙,也是在赞誉今日之会,可以和当年梁园、铜雀台之会相媲美。

四美具,二难并。穷睇眄于中天,极娱游于暇日。

就像上一句所描绘的,此时有美景、有美食、有美酒、有美文,于难得之时遇到难得之人,真是一场盛会!大家一起极目天边,欣赏这转瞬即逝的美景;一起尽情游戏,享受这片刻的欢乐时光。

天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。

物盛而衰,乐极则悲。面对高远无极的天地之时,人们自然可以意识到自身的渺小,意识到眼下的小小欢乐,只不过是天地之间的一瞬而已。与永恒相比,这些欢乐又有什么意义呢?况且人生在世,福祸本来就是定数。此时欢乐越多,明日的空虚失落就越大——此时终将过去,明日终会来临。眼见逆旅在前却避无可避,这是多么的无奈!

望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。

王勃正在自己的人生旅程上艰难跋涉。初唐之时,除了关中到洛阳一带尚称得上繁华以外,南方大部分地方都还贫困落后。他从长安一路向南,去交趾探望自己的父亲,仿佛是慢慢从文明走入蛮荒。

南昌刚好是他旅程的中点。回首来路,西北望长安,已经在几千里以外了,在那太阳落下的地方。眺望前程,吴楚东南坼,父亲所在的地方隐藏在重重的云雾里,看不清还有多少艰难险阻。一边是再也攀不上的高耸天柱,一边是不可知的万丈深渊,人生沦落到此,进退两难。

关山难越,谁悲失路之人;萍水相逢,尽是他乡之客。

这是与前面落霞一句并称的千古名句。关山是什么?是连接关中与西部的唯一通道,以关陇古道的名字为人所熟知。关陇古道在崇山峻岭之中萦回曲折,是有名难走的道路。当年张衡在四愁诗中说“我所思兮在汉阳,欲往从之陇坂长”,说的就是这里。

王勃虽然没有翻越关山,但他一路行来,旅途中的艰辛比翻越关山古道更多更难。旅人迷于道路,甚至客死道边,乃是常见的事情,谁又知道这些漂泊天涯的人心中有多少失意悲苦!后来王守仁贬谪在贵州,遇到一家三口同时倒毙于山下,也只有他出于同情才埋葬祭拜。“古者重去其乡,游宦不逾千里。吾以窜逐而来此,宜也。尔亦何辜乎?”

谁不爱自己的故园?谁愿意冒着死亡的危险远赴他乡?漂泊天涯的游子,大都有着自己不得不漂泊的理由。试看今日之宴上,从阎公、宇文州牧到千里逢迎的各位高朋,不管看起来光鲜还是落魄,不都是孤独的异乡之人吗?大家都像那无根的浮萍、像大江中失去控制的小舟,只能随着天下的大势而随波逐流、身不由己啊!

怀帝阍而不见,奉宣室以何年?

用这一句,王勃清楚的点出了自己漂泊的原因——宦途失意,报国无门。“道不行,乘桴浮于海”,既然此时君主不待见我,那我也只好浪迹于江湖了。当年贾谊能被文帝召回长安,我有没有这样一天呢?

嗟乎!时运不齐,命途多舛。冯唐易老,李广难封。

时也运也命也——人的一生,真的是被冥冥中不可知的命运所操纵。西汉的冯唐勤恳贤良,却历经文帝、景帝两朝不被提拔。等终于被汉武帝赏识要委以重任时,已经年过九十了。人的一生,就是这样短暂,时机一纵即逝。汉武帝时的飞将军李广一生数十次参战,威名远播于匈奴,却总是因为各种各样的原因无法以军功封侯。最后更是因出征迷路获罪,自尽而死。这难道不是他们注定的悲剧吗?

屈贾谊于长沙,非无圣主;窜梁鸿于海曲,岂乏明时?

即使是遇到圣明的君主,也难以拯救这些人的命运。贾谊是西汉承前启后的大学问家、第一流的聪明贤才,在史记上和屈原并列在《屈子贾生列传》里的人物。但这样的人却被汉文帝下令贬谪到长沙,虽然后来文帝又召回他问询,但问的却不是治国安邦之道,而是鬼神虚妄之事,多么令人惋惜。

梁鸿是东汉的大学者,举案齐眉中的男主角。他因为写了首政治讽刺诗而被汉章帝追捕,被迫逃亡到海曲,隐姓埋名才得以终老。这两位都是著名的贤良之人、大学问家,而汉文帝和汉章帝也是历史上出色的明君。结果明君贤臣不但不能相得益彰,反而以此为下场,这是不是也说明了命运的难以抵抗呢?

所赖君子见机,达人知命。老当益壮,宁移白首之心。穷且益坚,不坠青云之志。

但是,这并不代表我们要向命运低下头颅。君子能够乐观面对一切逆境,不改心中青云之志;更能够伺机而动,随时准备挑战命运。人在衰老之时,心灵要愈加强大,不能因为老去而改变自己的想法。人在穷困之时,更要坚定自己的信念,不能让自己的志向和现实妥协。

因为每一次妥协都是向命运的屈服,都是将自己的未来推向那注定潦倒的结局。只有那些永不服输、屡败屡战的猛士,才能真正主宰自己的人生。当年班超投笔从戎时已经三十多岁了,刘邦起义兵之时更是年近五十,如果他们早早就安于自己的命运,又怎么可能创下如此绝世的功业呢?

酌贪泉而觉爽,处涸辙以犹欢。

最正确的心态,是坦然地直面命运。不因权势而堕落,不因得志而骄傲,不因困境而绝望,不因落魄而自卑。当年的清官吴隐之路过贪泉,既不会因为这泉水的传说而避而不饮,也不会矫揉造作地找借口掩饰,而是遵从自心,渴了就喝,喝完就走——毕竟只是一杯泉水而已,难道就能浇灭君子心中的正气?路上小水坑里的鱼儿,哪怕陷入相濡以沫的困境,也一样可以笑着面对,谁说就一定要惶惶然不可终日?

北海虽赊,扶摇可接;东隅已逝,桑榆非晚。

就算是小水坑里的鱼儿,也可能是北冥之鱼啊。北冥有鱼,其名为鲲,化而为鸟,其名为鹏。当它化作鲲鹏之时,自然可以水击三千里,抟扶摇而上者九万里,不管是南冥还是北海,一振翅就可以抵达。有这样的本领和志向,自然不用因为一时身处涸辙而自怨自艾。就算失之东隅,错过了上一个好机会,但一样可以收之桑榆,未来会有更多的机遇在等待着你。但如果你因为错过一个机会就把余生都用来悔恨哭泣,那后面的机遇就都被你自己放弃了。

孟尝高洁,空余报国之情;阮籍猖狂,岂效穷途之哭!

君子既要胸怀高远,又要知行合一。志向这东西,单靠心中想想是万万不可能实现的,一定要踏踏实实、持之以恒的去做事。像当年还珠合浦的孟尝,虽然自己的品性确实高洁,但遇到困难就回家隐居务农,这就算有报国之心,也只是空话而已。阮籍可算是有才,可却将才华全用来谈玄说易、搞得两晋风气都虚无放诞。后面东晋朝廷诸公、一群名士,不想着克复中原,反而新亭对泣,这根本就不是值得学习的榜样!

在这两段中,王勃的笔锋一转,从写景自然地转向抒情。汉人朴实浑厚,魏晋飘逸潇洒,宋人以文载道,但唐人的风气却是极致的豪迈奔放。就算处在人生中最为困顿的时期,王勃的笔下依然是满溢着自信和希望,坚信自己一定能够走出困境、一飞冲天。

当时的主流风气其并不是这样的。“争构纤微,竞为雕刻,骨气都尽,刚健不闻”,这才是当时宫廷流行的靡靡之风。滕王阁上,那些事先已经悄悄写好、揣在各人怀中的诗文,想来也都是这些纤巧绮靡的货色。王勃所写下的前几段,虽然文字之美已经达到了极致,可还没有彻底脱出这个窠臼。

但从这两段开始,整篇文章彻底去到了一个全新的境界。纵然形制还是四六对仗的骈体、纵然文字还是那样的极尽华丽,但有某种东西、某种直击人的心底让人泪流满面无法呼吸的东西慢慢从中浮现出来。这种东西,就是人们常说的“风骨”,是支持中国文学传承数千年的奥妙所在。

高情壮思,有抑扬天地之心;雄笔奇才,有鼓怒风云之气。初唐四杰,正是这种风骨的引领者。他们像庄子笔下的大鹏一样,绝云气,负青天,将文学的边界撑展开来,给后来的唐代文人们留下一个可以尽情施展的世界。

Python3 学习之路(3) 变量

变量简述

Python 中的变量赋值不需要类型声明。
每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
等号(=)用来给变量赋值。
等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。

1
answer = 42 #之前看到过的简单的变量赋值

标准数据类型

数字(Number)

长整型(int)

在Python3中,只有一种int代表长整型,可以参照上述进行赋值和计算。在超过类似 C/C++ 中的 int 变量时,自动的转换成一个精度无限的long类型。同时,python提供16进制0x写法,和8进制的0o写法。

浮点数(float)

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以使用平时的小数写法,也支持科学计数写法。

布尔值(bool)

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,注意其大小写。
布尔值可以参与数字的运算,此时True代表1,False代表0。

布尔值可以用and、or和not运算,分别对于与,或,非。

复数(complex)

复数的赋值可以使用两种方法。

1
2
s = 3 + 1j
d = complex(3,2)

数值计算

python 支持 加法、减法、乘法、除法、地板除法、取余、乘方的数值计算。在混合计算时,Python会隐式的把整型转换成为浮点数。

1
2
3
4
5/2 #除法 返回一个浮点数 2.5
5//2 #地板除法 返回一个整数 2,向0取整
5%2 #取余 返回一个整数/浮点数,取决于两个操作数是否有浮点数
2**5 #乘方

字符串(String)

字符串是以单引号\’或双引号\”括起来的任意文本,比如\’abc\’,\”xyz\”等等。请注意,\’\’或\”\”本身只是一种表示方式,不是字符串的一部分,因此,字符串\’abc\’只有a,b,c这3个字符。
字符串可以用截取的语法,格式为:变量[头下标:尾下标]

1
2
3
4
5
6
print(str[0:-1])  # 输出第一个到倒数第二个的所有字符  
print(str[0]) # 输出字符串第一个字符
print(str[2:5]) # 输出从第三个开始到第五个的字符
print(str[2:]) # 输出从第三个开始的后的所有字符
print(str * 2) # 输出字符串两次
print(str + "TEST") # 连接字符串

注意,python里面的字符串(甚至包括其他引用类型),是以值比较相等的,而不是像java等语言比较内存地址。故两个内存地址不同,但内容相同的字符串做相等判定,答案是True。

列表(List)

列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号之间、用逗号分隔开的元素列表,列表中的元素是可以改变的。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

元组(Tuple)

元组与列表类似,不同之处在于元组的元素不能修改。元组写在小括号里,元素之间用逗号隔开。
tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:

1
2
tup1 = ()  # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

string、list和tuple都属于sequence(序列)。

集合(Set)

集合是一个无序不重复元素的序列,其基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合。
但是创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

1
2
3
4
5
6
7
a = set('abracadabra') 
b = set('alacazam')
print(a)
print(a - b) # a和b的差集
print(a | b) # a和b的并集
print(a & b) # a和b的交集
print(a ^ b) # a和b中不同时存在的元素

字典(Dictionary)

字典当中的元素是通过键来存取的,而不是通过偏移存取,这是字典与序列不同的地方。

字典是一种映射类型,字典用”{ }”标识,它是一个无序的键(key) : 值(value)对集合。
键(key)必须使用不可变类型,在同一个字典中,键(key)必须是唯一的。
字典可以通过中括号中加key的方法来获得value,也可以调用.keys() 或 .value() 方法来获得其中的所有键与值。

空值(None)

空值是一个特殊的值,用None表示,空值不能代表0,0也不能代表空值。

相关函数

del var

删除一些对象的引用,你可以使用del删除一个或多个的对象引用,如果要多个,用逗号隔开。

1
del var1,var2,var3

int(x[,base])

1
2
age = int(10.9) # 将x转换为int型变量,向0取整
status = int('10',2) # 构造2进制下的10,即十进制下的2,注意'10'是字符串

float(x)

1
weight = float(50) # 将x转换float型变量

complex(real[,imag])

1
2
a = complex(1) # 构造复数 1 + 0j
b = complex(-1,5) # 构造复数 -1 +5j

str(x)

将x转换为字符串。

repr(x)

将对象转化为供解释器读取的形式,返回一个字符串。

eval(expression[, globals[, locals]])

执行一个字符串表达式,并返回表达式的值。

参数 含义
expression 表达式
globals 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。
locals 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
1
2
3
4
eval('2 + 2') # 返回一个值为4的int类型
n = 4
eval('n ** 2') # 返回一个值为16的int类型
eval('"hello," + str(0)') # 返回一个值为'hello,0'的string类型

tuple(s)

将s转换为元组。

list(s)

将s转换为列表。

dict(d)

将d转换为字典。

1
2
3
4
sex = dict(boy='1',girl='0') #传入关键字
week = dict([('Mon', 0), ('Tues', 1), ('Wed', 2),
('Thur', 3), ('Fri', 4), ('Sat', 5), ('Sun', 6)])
#可迭代对象方式来构造字典

frozenset([iterable])

将iterable转换为冻结的集合,冻结后集合不能再添加或删除任何元素。
iterable为可迭代的对象,比如列表、字典、元组等等。
注意,冻结的集合中任意一个元素不能是列表,但是可以直接冻结列表(这里应该看作均为不可变的元素)。

1
2
3
4
5
6
7
8
tup = (3, 5.0, "test", (2, 2), ([2,3],[3,3])) 
#元素分别为int、float、string、tuple、带有list的tuple
list = [321,"test",((2,2),(3,3))]
#元素分别为int、string、带有tuple的tuple
frozenset(tup)
# 非法操作,冻结的集合中含有带list的元素
frozenset(list)
# 合法操作,冻结的中不含有带list的元素

chr(x) ord(c)

chr(x) 将整数x以ASCII码表转换成字符。
ord(c) 将字符c以ASCII码表转换成整数。

hex(x) oct(x)

hex(x) 将整数x转换成16进制,以字符串的格式返回。
oct(x) 将整数x转换成8进制,以字符串的格式返回。

id(x)

返回变量x的内存地址。

type(var)

查询变量所指的对象类型。

isinstance(var, type)

判定查询变量所指的对象类型是不是type,若是则返回True,否则返回False。

1
2
3
n = 3
if isinstance(n, int) :
print("n's type is int)

type()与isinstance()的区别在面向对象时可以区分出来。
若有A类,且B类继承了A类。
则,type()认为A与B是两种不同的数据类型。
而,isinstance()认为B类的对象也是一种A类的对象,他们同属于一种数据类型。


引用

  1. http://www.runoob.com/python3/python3-data-type.html
  2. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431658624177ea4f8fcb06bc4d0e8aab2fd7aa65dd95000

Python3 学习之路(2) 基础语法

你好,世界

在工程下新建 main.py 文件,向文件写入

1
print("你好,世界")

如果你的文件是UTF-8编码存储的,那么这个文件可以立即运行,如果不是,会报一个 SyntaxError 错误,我建议的解决方法是将存储的文件编码改成UTF-8 without BOM。

同时,我还建议在文件头加入一行#coding=utf-8,这样Python会以UTF-8编码解析此文件。而之前没有加入本行也能运行的原因是因为:Python3.X 源码文件默认使用UTF-8编码,所以可以正常解析中文,无需指定UTF-8编码。

命令提示符/终端下调用脚本

在命令提示符/终端下,进入之前工程写好的 main.py 文件的目录,输入 python main.py,便可执行,我们称这种方式为脚本编程。

标识符

在 Python 里,标识符由字母、数字、下划线组成。

在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

Python 中的标识符是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入;

  • 以双下划线开头的 __foo 代表类的私有成员
  • 以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。

保留字符

下面的列表显示了在Python中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。

所有 Python 的关键字只包含小写字母。

and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

行和缩进

Python的代码不使用大括号 {} 来控制逻辑、作用范围,而是适用行首的空白缩进来控制。
行首的空白缩进可以适用 Tab 或者空格来控制,每一个逻辑、作用范围的递进,需要保证相同的缩进量,譬如,一直缩进为4个空格的程序,进入一个判定,但是接下来的缩进量变成了5个空格,则会中断程序的运行。
缩进量在一开始就需要定下,然后之后要严格执行,一般建议4个空格作为单位缩进量,并且不要混用 Tab。

多行的语句

Python不使用像 C/C++ 一样强制要求分号作为一个语句的结束,在python中一般以新行作为语句的结束符。

但是我们可以使用斜杠( \)将一行的语句分为多行显示,

1
2
3
total = a + \
b + \
c

语句中包含 [], {} 或 () 括号就不需要使用多行连接符。

1
2
days =  ['Monday',  'Tuesday',  'Wednesday',  
'Thursday', 'Friday']

Python 也可以同一行显示多条语句,方法是用分号 ; 分开,但极不建议这样做。

1
print 'hello';print 'World';

引号

Python 可以使用引号( ‘ )、双引号( “ )、三引号( ‘’’ 或 “”” ) 来表示字符串,引号的开始与结束必须的相同类型的。

其中三引号可以由多行组成,编写多行文本的快捷语法,常用于文档字符串,在文件的特定地点,被当做注释。

1
2
3
4
word =  'word' 
sentence = "这是一个句子。"
paragraph = """这是一个段落。
包含了多个语句"""

注释

python中单行注释采用 # 开头。
注释可以在语句或表达式行末:

1
answer =  "42"  # 这是一个注释

python 中多行注释使用三个单引号(‘’’)或三个双引号(“””)。

转义字符

\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r’’表示’’内部的字符串默认不转义。


引用

  1. http://www.runoob.com/python/python-basic-syntax.html
  2. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431658624177ea4f8fcb06bc4d0e8aab2fd7aa65dd95000

Python3 学习之路(1) 初识

Python 简介

Python 是一种解释型1、交互性、面向对象2语言。

Python 由 Guido van Rossum 在 1989 年圣诞节期间编写。

Python 设计之禅(The Zen of Python)

  • Beautiful is better than ugly.
    美丽胜于丑陋
  • Explicit is better than implicit.
    显式胜过隐式
  • Simple is better than complex.
    简单优于复杂
  • Complex is better than complicated.
    复杂好于超复杂
  • Flat is better than nested.
    单一胜过于嵌套
  • Sparse is better than dense.
    间隔胜于紧凑
  • Readability counts.
    可读性很重要
  • Special cases aren’t special enough to break the rules.
    特殊的情况并不足以特殊到打破规则
  • Although practicality beats purity.
    尽管实用性打击代码的纯洁
  • Errors should never pass silently.
    错误绝不应该被默默地放过
  • Unless explicitly silenced.
    除非你有意为之
  • In the face of ambiguity, refuse the temptation to guess.
    面对含糊不清的地方,忍住去猜想的冲动
  • There should be one – and preferably only one – obvious way to do it.
    这里应该有一种(最好只有一种)明确的方法来了解它
  • Although that way may not be obvious at first unless you’re Dutch
    除非你是Dutch, 在一开始它可能并不是那么明显
  • Now is better than never.
    现在开始做总比最远不做的好
  • Although never is often better than right now.
    不加思考就做还不如不做
  • If the implementation is hard to explain, it is a bad idea.
    如果某个实现很难解释清楚,那一定是个糟糕的想法
  • If the implementation is easy to explain, it may be a good idea.
    如果某个实现很好解释,这也许是个好的想法。
  • Namespaces are one honking great idea – let’s do more of those!
    命名空间是个绝妙的想法,我们应该多用,多多益善!

Python 应用范围

  • 网络应用,包括网站、后台服务
  • 许多日常需要的小工具,包括系统管理员需要的脚本任务
  • 深度学习
  • 人工智能

Windows10 下安装配置

Python 官方网站 下载对应版本,现在我的版本是 Python V3.6.5 for windows

安装过程没有什么好说的,但是可以选择自动配置PATH,不然需要在后面手动进行配置。

变量名 描述
PATH 系统维护的可用的命令行解释器和其他程序的信息,应添加”(Python安装目录)\Scripts\“ 和 “(Python安装目录)\“
PYTHONPATH PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。
PYTHONSTARTUP Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此变量指定的文件中的代码。
PYTHONCASEOK 加入PYTHONCASEOK的环境变量, 就会使python导入模块的时候不区分大小写.
PYTHONHOME 另一种模块搜索路径。它通常内嵌于的PYTHONSTARTUP或PYTHONPATH目录中,使得两个模块库更容易切换。

安装完,启动命令提示符,在任意目录下输入 python ,进入Python的交互式解释器,显示Python的版本,此时说明安装成功。

接下来,python的语法,我将用 IntelliJ IDEA,加 Python 的拓展插件来实践。

Python解释器

当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

  • CPython
    当我们从Python官方网站下载并安装好Python 3.x后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。
    CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
  • IPython
    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
    CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。
  • PyPy
    PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
    绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
  • Jython
    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
  • IronPython
    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

小结
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
本教程的所有代码只确保在CPython 3.x版本下运行。请务必在本地安装CPython(也就是从Python官方网站下载的安装程序)。


引用

  1. http://www.runoob.com/python/python-intro.html
  2. http://www.runoob.com/python/python-install.html
  3. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143161198846783e33de56d4041058c3dfc7e44ee1203000
  4. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431608990315a01b575e2ab041168ff0df194698afac000

  1. 1.运行效率较低,不适合运算密集型的部分。
  2. 2.当然可以只编写面向过程的部分。

Qt 5 学习之路(1)


引用

  1. http://www.runoob.com/python/python-intro.html
  2. http://www.runoob.com/python/python-install.html
  3. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143161198846783e33de56d4041058c3dfc7e44ee1203000
  4. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431608990315a01b575e2ab041168ff0df194698afac000

  1. 1.运行效率较低,不适合运算密集型的部分。
  2. 2.当然可以只编写面向过程的部分。