python的基础语法

基础语法简介
运行脚本及编码
 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python
#-- coding:utf-8 --
  第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

如果你使用Notepad++进行编辑,除了要加上# -- coding: utf-8 --外,中文字符串必须是Unicode字符串

( 字符编码 具体详见 Python学习(四)数据结构 —— str )

# 注释以 # 字符起始,直至实际的行尾;代码中注释不会被Python解释;文本字符串中的#仅表示#
# this is the first comment
SPAM = 1                              # and this is the second comment
STRING = "# This is not a comment"    # and this is the third comment        
''' 前后三个单引号可进行多行注释
    通常是对函数、对象的说明
    注释代码仍以 # 为主
'''

(Note: 使用IDE的注释快捷键,可方便注释/去注释多行代码;如 Notepad++ 是 “Ctrl +Q” )

赋值
1 # " = " 用于变量赋值;变量直接赋值,无须定义变量类型; 无须定义变量的数据类型
2 a = 20
3 # n # 该条报错!变量在使用前必须赋值,否则会出错
4 x = y = z = 1 # 可将同一个值赋给多个变量

第三行代码若执行,会报错,显示如下:

在Python中,变量名没有类型,但对象有;变量名只是对对象的引用(内部实现为指针)

变量命名规则及惯例
    语法: (下划线或字母)+(任意数目的字母、数字或下划线)
        变量名必须以下划线或字母开头,而后面接任意数目的字母、数字或下划线。

区分大小写: SPAM和spam不同
    禁止使用保留字

命名惯例:

以单一下划线开头的变量名(X)不会被 from module import *语句导入
前后有下划线的变量名(X)是系统定义的变量名,对解释器有特殊意义
以双下划线开头,但结尾没有双下划线的变量名(__X)是类的本地(“压缩”)变量
通过交互模式运行时,只有单个下划线的变量名(
)会保存最后表达式的结果

# 简单的输入输出
raw_input("Please input: ")            # Python2.x  raw_input() 
# input("Please input: ")              # Python3.x input()
print "hello world"                    # Python2.x  可以不用加()
print("hello world")                   # Python3.x  必须要加(),不然会报错! Python3.x print() 会是空行,而Python2.x  print() 则会显示(),须注意!
# print("This is "Note"")              # 该条报错!需对"转义

运行输入后,显示   raw_input("Please input: ") 括号内为显示的字符串,用户可输入

通常会对用户输入赋值, 如 a = raw_input("Please input: ")

运行输出后,显示     print(“hello world”) 括号内为输出的内容

Note: Python 2.x raw_input(Please input: ) print “hello world” 与 Python 3.x 有不同;copy 网上代码若运行报错,有可能就是版本问题

关于特殊字符及Unicode
1 # 关于特殊字符及Unicode
2 print(“This is “Note””) # \ 转义
3 print(“This is\nNote”) # \n 换行
4 print (“Hello”+u"\u0020"+“World”) # u’xxxx’:Python2.x unicode对象 = 直接在字符串前加u关键字
5 print(“Hello\u0020World”) # Python2.x 直接输出 Hello\u0020World ,Python3.x 会输出 Hello World

字符串若包含 " 等,解释器会引起混淆,需转义;另,\n 表示换行

从Python 3.0开始所有的字符串都支持Unicode(参考 http://www.unicode.org

Unicode 的先进之处在于为每一种现代或古代使用的文字系统中出现的每一个字符都提供了统一的序列号。之前,文字系统中的字符只能有 256 种可能的顺序。通过代码页分界映射。文本绑定到映射文字系统的代码页。这在软件国际化的时候尤其麻烦(通常写作 i18n —— ’i’ + 18 个字符 + ’n’ )。Unicode 解决了为所有的文字系统设置一个独立代码页的难题。

语法规则

例一:Fibonacci数列

a,b = 0,1 # 变量也可这么赋值,但不建议
while b < 30:
print(b)
a,b = b,a+b       # 相当于 a=b b = a+b

运行后如图:  该代码输出了一段 Fibonacci数列 ,使用了while的循环语句,暂时不理解无妨,仅感受下Python的语法格式

需要注意的是:缩进

Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。同样的如 if 语句如下:

根据PEP的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中可以自定义空格数,但是要满足每级缩进间空格数相 等)。使用Tab字符和其它数目的空格虽然都可以编译通过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。

# 例二:简单if
a = 2
if a>1:
print("a>1")     # if 无执行语句会报错,若需实现if条件下print,参考如下

a = 0 
if a>1:
    print("a>1")
print("a!=1")    # 该语句始终会执行,因为缩进并不在if条件下

例二 直接执行会报错,

一定需要注意语句格式上代码行的缩进,但即使不报错也不代表程序不出错,若例二中,若要求 print(“a!=1”) 仅在 a>1 的情况下执行

该处代码应由

1 a = 0
2 if a>1:
3 print(“a>1”)
4 print(“a!=1”)   # 该语句始终会执行,因为缩进并不在if条件下
    改为

1 a = 0
2 if a>1:
3 print(“a>1”)
4 print(“a!=1”) # 该语句仅if成立条件下执行

控制语句
       仅介绍,具体参阅后续章节

if语句,当条件成立时运行语句块。经常与else, elif(相当于else if) 配合使用。
for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。
while语句,当条件为真时,循环运行语句块。
try语句。与except,finally配合使用处理在程序运行中出现的异常情况。
class语句。用于定义类型。
def语句。用于定义函数和类型的方法。
pass语句。表示此行为空,不运行任何操作。
assert语句。用于程序调适阶段时测试运行条件是否满足。
with语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加密,然后在语句块运行退出后解密。
yield语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本以后。这个语句变成一个运算符。
raise语句。制造一个错误。
import语句。导入一个模块或包。
from import语句。从包导入模块或从模块导入某个对象。
import as语句。将导入的对象赋值给一个变量。
in语句。判断一个对象是否在一个字符串/列表/元组里。

数据结构
       仅介绍,具体参阅后续章节

Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才做出检查。所以操作对象时可能会抛出异常。不过,虽然Python采用动态类型系统,它同时也是强类型的。Python禁止没有明确定义的操作, 比如数字加字符串。
与其它面向对象语言一样,Python允许程序员定义类型。构造一个对象只需要像函数一样调用类型即可。类型本身也是特殊类型type的对象(type类型本身也是type对象),这种特殊的设计允许对类型进行反射编程。
Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减少代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
除了各种数据类型,Python语言还用类型来表示函数、模块、类型本身、对象的方法、编译后的Python代码、运行时信息等等。因此,Python具备很强的动态性。

表达式
      仅介绍,具体参阅后续章节

Python的表达式写法与C/C++类似。只是在某些写法有所差别
算术运算符与C/C++类似。+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。>>, <<表示右移和左移。&, |, ^表示二进制的AND, OR, XOR运算。>, <, ==, !=, <=, >=用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。在这些运算符里面,~, |, ^, &, <<, >>必须应用于整数。
使用and, or, not表示逻辑运算
区分列表(list)和元组(tuple)两种类型;支持列表切割(list slices)
一些Python特有的方法,如 range() lambda 等

函数
  仅介绍,具体参阅后续章节

Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了增强代码的可读性,可以在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings),用于解释函数的作用、参数的类型与意义、返回值类型与取值范围等。可以使用内置函数help()打印出函数的使用帮助。比如: help(randint)
复制代码
1 # 函数示例
2 def my_fun1():
3 print(“hi”)
4 my_fun1() # 调用函数
5 def my_fun2(a): # 函数可带参数, 参数可为多个
6 if(a>2):
7 print(">2")
8 my_fun2(3)
复制代码

对象

# 对象示例
class User(object):                # Python2.x 需在()内加object;Python3.x 不用加object
    def __init__(self,name):       # 类似于构造函数
        self.name=name
    def print_name(self):
        print(self.name)
 
u = User("John")                   # u为一 User对象
print(u.name)                      # 输出对象属性
User.print_name(u)                 # 调用print_name()函数

类库
Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python标准库命名接口清晰、文档良好,很容易学习和使用。 如引用,需import,如引入算数模块 import math
Python社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能无所不包,覆盖科学计算、Web开发、数据库接口、图形系统多个领域,并且大多成熟而稳定。第三方模块可以使用Python或者C语言编写。SWIG,SIP常用于将C语言编写的程序库转化为Python模块。Boost C++ Libraries包含了一组库,Boost.Python,使得以 Python 或 C++ 编写的程序能互相调用。借助于拥有基于标准库的大量工具、能够使用低级语言如C和可以作为其他库接口的C++,Python已成为一种强大的应用于其他语言与工具之间的胶水语言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值