Python基础知识

Python基础

语句和语法

Python语句中有一些基本规则和特殊字符:

  • 井号(#)表示之后的Python字符为注释
  • 换行符(\n)是标准的行分割符(通常一个语句一行)
  • 反斜线(\)继续上一行
  • 分号(;)将两个语句连接在一行中
  • 冒号(:)将代码块的头和体分开
  • 语句(代码块)用缩进的方式体现
  • 不同的缩进深度分割不同的代码块
  • Python文件以模块的形式组织

注释(#)

Python的注释从#开始,注释可以在一行的任意地方,解释器会忽略掉#之后所有的内容

继续(\)

Python语句,一般使用换行分隔,也就是说一行一个语句,一个过长的语句可以使用反斜杠\分解成几行:

if (weather_is_hot == 1) and \
(sharK_warning == 0):
    send_goto_beach_message_to_pager()

多个语句构成代码组(:)

缩进相同的一组语句构成一个代码块,我们称之为代码组。像if``while``def``class这样的复合语句,首行以关键字开始,以:结束。

代码组由不同的缩进分隔

缩进四个空格宽度,避免使用制表符。

同一行书写多个语句(;)

同一行上书写多个语句会大大降低代码的可读性,不提倡这么做。

模块

每一个Python文件脚本都可以被当成是一个模块。模块以磁盘文件的形式存在。当一个模块变得过大,并且驱动了太多功能的话,应该考虑拆一些代码出来另外建一个模块。模块里的代码可以是一段直接执行的脚本,也可以是一堆类似库函数的代码,从而可以被别的模块import调用。

变量赋值

赋值运算符

=号是最主要的赋值运算符。

aInt = 2
aString = 'huang'
aFloat = 1.00
# ......
  • 赋值并不是直接将一个值赋给一个变量。在Python中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是已存在的,都是将该对象的引用(而不是值)赋给该变量。
x = 1
y = (x=x+1) # 这样写是非法的。
  • 链式赋值
y = x = x+1
  • 增量赋值
x += 1 # += -= *= /= %= **= <<= >>= &= ^= |=

Python不支持++``--类似的自增和自减运算。

  • 多元赋值

将多个变量同时赋值的办法称为多元赋值。

x, y, z = 1, 2, 'huang'

标识符

标识符是电脑语言中允许作为名字的有效字符串集合。其中,有一部分是关键字,构成语言的标识符。

合法的Python标识符

Python标识符字符串规则与其它大部分用C编写的高级语言相似。

  • 第一个字符必须是字母或者下划线_
  • 剩下的字符可以是字母和数字或者下划线。
  • 大小写敏感。

关键字

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

专用下划线标识符

Python中使用下划线作为变量前缀和后缀指定特殊变量,Python中下划线的特殊用法如下:

  • _xxx: 不用from module import * 导入。
  • __xxx___: 系统定义名字。
  • __xxx: 类中的私有变量名。

核心风格:避免使用下划线作为变量名的开始。

基本风格指南

  • 注释

注释对于自己和后来人来说都是非常重要的,特别是对那些很久都没用动过的代码来说。注释显的尤为重要。既不能缺少注释,也不能过度使用注释,尽量使注释简洁明了,并放在最合适的地方。注意确保注释的准确性。

  • 文档

Python还提供了一个机制,可以使用_doc_特别变量,动态获得文档字串。在模块、类声明、或函数声明中第一个没有赋值的字符串可以用属性obj._doc_来进行访问。其中obj是一个模块、类、函数的名字。

  • 缩进

缩进对齐有非常重要的作用,通常使用四个空格。

  • 选择标识符名称

好的判断也适用于选择标识符名称,请为变量选择短而意义丰富的标识符。虽然变量名的长短对于今天的编程语言不再是一个问题。但使用简短的名字依然是个好习惯。这个原则同样适用于模块(Python文件)的命名。

模块结构和布局

# usr/bin/env python  # 起始行(在Unix环境下使用)

" this is a test module " # 模块文档,简单的介绍模块的功能以及重要全局变量的含义

import sys
import os # 模块导入,导入当前模块的代码所需要的所有模块

debug = True # 变量定义,这里定义的变量为全局变量,如非必要,尽量使用局部变量代替全局变量

class FooClass(object): # 类定义
    "foo class"
    pass
    
def tese(): # 函数定义
    "test function"
    foo = FooClass()
    if debug:
        print 'run test()'
        
if __name__ == '__main__': # 主程序,无论模块是被别的模块导入还是作为脚本直接执行,都会执行这部分代码。这里通常不会有太多功能性代码。而是根据执行的模式调用不同的函数。
    test()          
  • __name__指示模块应该如何被加载

由于主程序代码无论是模块被导入还是被直接执行都会运行,我们必须知道模块如何决定运行方向。一个程序可以需要导入另一个程序的一个模块,以便重用一些代码。这时,你只想访问那些位于其它程序的代码,而不是运行那个程序。__name__系统变量就用来解决这个问题。

如果模块是被导入,__name__的值就说模块名字。

如果模块是直接执行,__name__的值为__main__

在主程序中书写测试代码

内存管理

  • 变量无需事先声明
  • 程序员不用关心内存管理
  • 变量名会被回收
  • del语句能够直接释放资源

变量定义

对于大多数编译型语言,变量在使用前必须先声明。在Python中,无需显式变量声明语句,变量在第一次被赋值时自动声明,和其它大多数语言一样,变量只有在创建和赋值后才可以被使用。

动态类型

Python中不但变量名无需事先声明,而且也无需类型声明,在Python中,对象的类型和内存占用都是运行时确定的,尽管代码被编译成字节码,Python仍然是一种解释型语言,在创建---也就是赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型,在对象创建后,一个该对象的应用会被赋值给左侧的变量。

内存分配

为变量分配内存时,实际上是在借用系统资源,在用完之后,应该释放借用的系统资源,Python解释器承担了内存管理的复杂任务,这大大简化了应用程序的编写,我们只需要关心我们要解决的问题,至于底层的事情交给Python解释器去做就行了。

引用计数

Python内部记录着所有使用着的对象各有多少引用,一个内部跟踪变量,称为一个引用计数器。至于每个对象各有多少引用,简称引用计数。当对象被创建时,就创建了一个引用计数,当这个对象不需要时,也就是说,这个对象的引用计数为0时,它被垃圾回收。

垃圾收集

不再被使用的内存会被一种称为垃圾收集的机制释放,虽然解释器跟踪对象的引用计数,但垃圾收集器负责释放内存,垃圾收集器是一块独立代码,它用来寻找引用计数为0的对象,它也负责检查那些虽然引用计数大于0但也应该被销毁的对象。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容