Python 基础语法

Posted hyserendipity

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 基础语法相关的知识,希望对你有一定的参考价值。

2017-06-24 09:50:14

一、变量

Python中的变量名的要求和C++基本一致

(1)只能以字母或者下划线作为开头,不能以数字开头

(2)标识符的其他部分可以有字母下滑线和数字组成,不允许有特殊字符出现如$等(c++中可以有$,且可以放在首位)

(3)不允许有空格,不允许有-分割

python 中只需要给变量赋值而不需要申明具体的数据类型,这是和c++有区别的地方

id(): 得到变量地址

eval(string s): 在内存中寻找 s这个变量名,有的话给出他的值

 

二、判断语句利用冒号和缩进完成

冒号必须要加上

if xxxx:

elif xxxx:

else xxxx:

#程序中出现中文会报错,需要加上coding=gbk

需要注意的是python中是没有switch case语句的

# coding=gbk
# 出现了syntaxerror:non-utf-8 code 错误就是编码问题,需要加上 coding=gbk

if name=="seu":
    print("东南大学")
else:
    print("其他大学")
name = input("请输入学校:")

if name=="UCB":
    print("加州伯克利")
else:
    print("其他大学")

 

三、循环语句

冒号必须要加上

1、while ...:

2、for...in:

for..in是另外一个循环语句,它在一序列的对象上逐一使用队列中的每个项目。else部分是可选的。如果包含else,它总是在for循环结束后执行一次,除非遇到break语句。

for i in range(1,5):
    print(i)
else:
    print("循环结束")

range()生成一个序列,前开后闭,第三个参数是步长,默认值为1

 

四、运算符和表达式

与c++不同的地方:

1、乘法* 既可以表示两个数相乘,若是字符串乘以数字则是将字符串复制多次

2、幂运算** a**b,表示a的b次幂

3、与或非 用的是英文表示 and or not

4、python不支持++ ,--等自增,自减操作

优先级:

 

五、函数

def xxx(xxx,xxx):

使用def关键字进行函数的声明,形参中可以存在有缺省值的存在,值得注意的是,和c++一致只能在末尾的参数有缺省值

若要修改外部参数值,需要加上global关键字,告诉编译器这是外部参数。

关键参数技术:即直接使用参数名进行赋值操作,避免了参数顺序,参数个数的问题,显得更加方便

def fun(x,y=5,z=10):
   print("x =",x,"y =",y,"z =",z)
fun(3,z=1)

另外,可以使用return语句返回一个值,使用pass表示空语句

 

六、文档字符串

可以使用__doc__(注意双下划线)调用查看函数或者类中第一个未被赋值的字符串,一般用来解释函数的功能

def fun(x,y=5,z=10):
   "这个函数的作用是输出三个数字。"
   print("x =",x,"y =",y,"z =",z)

print(fun.__doc__)

 

七、面向对象编程

基本语法:

class xxx:

  def fun(self):

    xxxx

(1)python中的类中元素在默认情况下都是public的,若要将某个数据声明成私有数据,则要在数据声明时在名字前加上两个下划线,形如:__privateval。

(2)public的数据不需要在函数外单独声明,只需要在__init__函数里加上就可以。

(3)函数外声明的数据属于整个类所有,类似于c++里的static静态成员数据,调用也是使用类名加上成员访问操作符

(4)类方法都必须加上self参数,这个和c++中的this指针是统一的,只不过必须要显示的表示出来

(5)__del__析构函数,在对象结束生命期的时候自动调用,也可以使用del 函数显示调用,必须要有self

(6)类初始化使用类名加上(),形如: p=xxx(xxx)

(7)析构函数一般不用写,因为python有自动回收机制,如果 自己写的话有一点需要注意的是,如果析构函数中修改了类的数据成员需要同过self.__class__.xxx来进行修改,否则会报错。简单的理解就是析构是针对当前对象的析构,所以需要通过self来进行调用与修改。更深层的理解是由于python回收机制的问题,由于回收的不可控性,如果只写一个del,则会导致出错。如果将所有的对象都显示调用析构函数,则也不会出错。不过这样显然得不偿失。

class Person:
    population=0

    def __init__(self,name):
        self.name=name
        Person.population+=1
    
    def show(self):
        print("目前的人口数是%d" %Person.population)

    def __del__(self):
        #写成Person.population-=1就会报错
        self.__class__.population-=1
        print("%s析构函数被执行了" %self.name)

p1=Person("a")
p2=Person("b")
p1.show()
del p1
p2.show()

面向对象中的继承操作:

class Perdata:

    def __init__(self,name,age):
        self.name=name
        self.age=age

    def show(self):
        print("姓名:%s 年龄:%d" %(self.name,self.age))

class Tecdata(Perdata):

    def __init__(self,name,age,salary):
        #调用父类的初始化函数
        Perdata.__init__(self,name,age)
        self.salary=salary

    def show(self):
        #调用父类相应的函数
        Perdata.show(self)
        print("工资为%d" %self.salary)

t=Tecdata("TIMHY",22,1)
t.show()

 

七、文件输入输出

python中使用file类完成相关文件的输入和输出操作

常用的函数:

.open("路径",模式)

.read() .readline() 读文件

.write(xxx) 写文件

模式‘r’(缺省模式) 读;‘w’ 写(若源文件里已经有内容,则清空从头开始写);‘a’ 结尾添加

f=open("e:\\\\t.txt",\'w\')
s=\'\'\'hello world
hello world
hello world\'\'\'
f.write(s)
f.close()

fin=open("e:/t.txt")
line=fin.readline();
while len(line)!=0:
    #把结尾的换行符去掉,因为读取时已经将换行符读取到了
    print(line,end=\'\')
    line=fin.readline()

 贴一段按行读取csv文件并输出的程序,比c++不知道高到哪里去了。

fin=open("C:/Users/YUAN/Desktop/ee.txt")
fout=open("e:/ee.txt",\'w\')
line=fin.readline().split(\',\');
while len(line)==3:
    s=line[1]+" "+line[2]
    fout.writelines(s)
    line=fin.readline().split(\',\');
fin.close();
fout.close();

 由于读取文件有风险,可能打不开,所以一般需要进行try-except语句进行控制。不过机制的Python提供了with open(...) as f:语句可以非常可靠的打开文件

以上是关于Python 基础语法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 代码片段编写 LaTeX 文档

python 学习python语法的片段

《Python学习之路 -- Python基础之切片》

[Python]常用代码块

Python基础语法

Python-11:Python语法基础-控制流