python学习笔记一——初识
系统环境
[root@localhost day1]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.5 (Santiago)
python版本
[root@localhost day1]# python --version
Python 3.6.3
注意:python2和python3的区别
1. 第一个python程序
python的源代码文件是以".py"为后缀。下面打印字符串"hello world"。
#!/usr/bin/env python if __name__=="__main__": #相当于C语言中的main()函数,是python程序的入口 print("hello world")
[root@localhost day1]# python 1.py
hello world
注意:关于if __name__=="__main__"的解释如下:
一个.py文件,如果是自身在运行,那么他的__name__值就是"__main__";
如果它是被别的程序导入的(作为一个模块),比如:
import re
那么,他的__name__就不是"__main__"了。
所以,在.py文件中使用这个条件语句,可以使这个条件语句块中的命令只在它独立运行时才执行
2. python必须知道的基础语法
2.1 python的文件类型
python文件类型分为3种,分别是源代码、字节代码、优化代码。这些代码可以直接运行,不需要进行编译或者链接。这正是python这么语言的特性。python的文件通过python解释器解释运行,windows有python.exe与pythonw.exe,一般安装在路径C:\python33中,当然也可以改变它的路径,只要保证环境变量设置正确即可。在Linux系统中,python解释器被安装在目标及其的/usr/local/bin/python目录下,将/usr/local/bin路径放进shell的搜索路径中,即可通过python命令在shell中调用。例:python xxx.py
2.1.1 源代码
python源代码的扩展名以py结尾,可在控制台下运行.python语言写的程序不需要编译成二进制代码,可以直接运行源代码。pyw是windows下开发图像用户接口的源文件,作为桌面应用程序的后缀名。这种文件是专门用于开发图形界面的,由pythonw.exe解释运行。以py和pyw为后缀名的文件可以用文本工具打开,并修改文件的内容。
2.1.2 字节代码
python源文件编译后生成pyc后缀的文件,pyc是编译过的字节文件,这种文件不能使用文本编辑工具打开或修改。pyc文件是与平台无关的,因此python的程序可以运行在windows、Unix、linux等操作系统上。py文件直接运行后即可得到pyc类型的文件,或通过脚本生成改类型的文件。下面这段脚本可以把hello.py编译为hello.pyc。
#!/usr/bin/env python import py_compile py_compile.compile("hello.py")
[root@localhost day1]# python hello.py [root@localhost day1]# ls hello.py hello.pyc
2.1.3 优化代码
扩展名为pyo的文件是优化过的源文件,pyo类型的文件需要用命令行工具生成。pyo文件也不能使用文本编辑工具打开或者修改。下面把hello.py编译成hello.pyo
#!/usr/bin/env python import py_compile py_compile.compile("hello.py")
[root@localhost day1]# python -O hello.py [root@localhost day1]# ls hello.py hello.pyo
参数“-O”表示生成优化代码。
2.2 python的编码规范
1. 变量名、包名、模块名
变量名、包名、模块名通常采用小写,可使用下划线。
#Filename: ruleModule.py #声明模块的名称,模块名采用小写。也可以不指定模块名,以py后缀的文件就是一个模块,模块名就是文件名 _rule = "rule information" #定义一个全局变量_rule。
2. 类名、对象名
类名的首字母采用大写,对象名采用小写。类的属性和方法以对象作为前缀。类的私有变量、私有方法以两个下划线作为前缀。下面这段代码演示了类的定义和实例化的规范写法。
#!/usr/bin/env python class Student: #类名大写 __name = "" #私有实例变量前必须有两个下划线 def __init__(self,name): self.__name = name #self相当于java中的this def getName(self): #方法名首字母小写,其后每个单词的首字母大写 return self.__name if __name__ == "__main__": student = Student("borphi") #对象名小写 print(student.getName())
[root@localhost day1]# python hello.py
borphi
3. 函数名
函数名通常采用小写,并用下划线或单词首字母大写增加名称的可读性,导入的函数以模块名作为前缀。下例中,为了演示导入函数前缀写法,使用了生产随机数的模块random,改模块有一个函数randrange()。该函数可以根据给定的数字范围生成随机数。randrange()声明如下:
randrange(start , stop[ , step])
参数step表示从start开始往后的步数。生成的随机数在[start , stop-1]的范围内。如[1,20] 取值范围是1--19。
#!/usr/bin/env python import random #导入random模块 def compareNum(num1,num2): #定义一个函数compareNum(),两个参数 if(num1 > num2): return 1 elif(num1 == num2): return 0 else: return -1 num1 = random.randrange(1,9) num2 = random.randrange(1,9) print("num1 =",num1) print("num2 =",num2) print(compareNum(num1, num2)) #调用函数传入两个随机参数
[root@Dannyserver danny]# python 1.py num1 = 3 num2 = 5 -1
2.2.2 代码缩进与冒号
代码缩进是指通过在每行代码输入空格或制表符的方式,表示每行代码之间的层次关系。python独有的方式,通过缩进分隔代码块。python对代码的缩进要求非常严格。如果不采用代码缩进风格,将会抛出一个IndentationError的错误。
2.2.3 模块的导入规范
在python中,如果需要在程序中调用标准库或其他第三方库的类,需要先使用import或from..import...语句导入相关的模块。
1. import语句
例:使用import语句导入sys模块,并打印相关内容。
#!/usr/bin/env python import sys #导入sys模块,sys模块是处理系统环境的函数的集合 print(sys.path) #输出python环境下的查找路径的集合,python默认会查找sys.path返回的目录列表 print(sys.argv) #sys.argv是存储输入参数的列表。默认情况下,argv自带的参数是文件名
[root@localhost danny]# python import_sys.py ['/home/danny', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk',
'/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages',
'/usr/lib64/python2.6/site-packages/gst-0.10', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib64/python2.6/site-packages/webkit-1.0',
'/usr/lib/python2.6/site-packages'] ['import_sys.py']
2. from...import...语句
使用from...import...语句导入与使用import语句导入的区别是前者只导入模块中的一部分内容,并在当前的命名空间中创建导入对象的引用;而后者在当前程序的命名空间中创建导入模块的引用,从而可以使用“sys.path”的方式调用sys模块的内容。
from sys import path from sys import argv print(path) #可以直接调用打印path列表的内容,没有模块名的限定。 print(argv) #但这种写法不太规范,如果程序比较复杂,导入了很多模块,还是用sys.path可以明确path和argv来自哪儿个模块
2.2.4 使用空行分隔代码
函数之间或类之间用空行分隔,表示一段新的代码的开。便于阅读。例:
#!/usr/bin/env python #coding:utf8 #中文编码,是程序能识别中文 class A: def funX(self): print("funY()") #空行 def funY(self): print("funY()") #空行 if __name__ == "__main__": a=A() a.funX() a.funY() print("哈哈哈")
例题:编写一个比较两个数字大小的函数。
#!/usr/bin/env python #coding:utf8 def compareNum(num1,num2): if(num1>num2): return str(num1)+">"+str(num2) elif(num1<num2): return str(num1)+"<"+str(num2) elif(num1==num2): return str(num1)+"="+str(num2) else: return "呵呵" num1=1 num2=2 print(compareNum(num1,num2)) num1=2 num2=1 print(compareNum(num1,num2)) num1=2 num2=2 print(compareNum(num1,num2))
[root@localhost danny]# python def_1.py 1<2 2>1 2=2
本段代码中的str()函数实现了数字类型到字符串类型的转换。
2.2.5 语句的分隔
在C、java等语言中标示语句结束的标识是分号。python也支持分号,同样可以用分号作为一行语句的结束标识。但在python中分号的作用没C、java中那么重要了,python中的分号可以省略,主要通过换行来识别语句的结束。例如:以下两行代码是等价的。
print("hello world!") print("hello world!");
python同样支持多行写一条语句,python使用"\"作为换行符,在实际应用中,一条语句卸载多行也是很常见的。例如,把SQL语句作为参数传递给函数,由于SQL非常长,因此需要换行书写。
#写法一 sql = "select id,name" \ from dept \ where name = 'A'" print (sql) # 写法二 sql = "select id,name" \ "from dept" \ "where name = 'A'" print (sql)
2.3 变量和常量
2.3.1 变量的赋值
python中的变量不需要声明,变量的赋值操作即是变量的声明和定义的过程。
python还支持对一些变量同时赋值的操作,例如:
a = (1,2,3) (x,y,z) = a print ("x=",x) print ("y=",y) print ("z=",z)
[root@Dannyserver danny]# python 1.py x= 1 y= 2 z= 3
提示:注意python版本问题,本文所有实验都是在python3上做的。
2.3.2 局部变量
局部变量的作用范围只在其被创建的函数内有效。
#!/usr/bin/env python def fun(): local = 1 #局部变量,只在函数内生效 print(local) fun() #调用函数
2.3.3 全局变量
全局变量是能够被不同的函数、类或文件共享的变量,在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。
全局变量通常在文件的开始处定义。下面定义了两个全局变量_a , _b 和两个函数add() , sub(),这两个函数将调用全局变量执行加减法运算。
_a=1 _b=2 def add(): global _a #用global调用全局变量,如果修改值,则全文局变量值都会改变 _a=3 return "_a + _b =",_a+_b def sub(): global _b _b = 4 return "_a -_b =",_a-_b print(add()) print(sub()) print(_a) print(_b)
[root@Dannyserver danny]# python 1.py ('_a + _b =', 5) ('_a -_b =', -1) 3 #通过调用global调用修改,导致全局变量已经改变 4
提示:应该尽量避免使用全局变量。因为不同的模块都可以自由访问全局变量。可能会发生一方修改导致全部文件数据都更改。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了