简介:
Python是一种面向对象,解释型,动态数据类型(变量不需要指定类型,由指向内存中存放值的类型决定)的高级程序设计语言,和shell,javaScript,php,perl,ruby等语言一样属于脚本语言;Python第一个发行版发行于1991年,其源代码遵循GPL协议;由于是解释型语言,python天生具有跨平台的特性,只要为平台提供相应的python解释器,python就可以在该平台运行;关于运行速度的问题,如果某些模块对运行速度有特别的要求,可以用c/c++实现相关模块;
环境搭建:
和java运行需要安装jdk一样,python程序的运行也需要依赖python环境,可以在终端命令窗口输入"python --version"查看是否安装python;如果没有安装,可以在python官网下载对应的版本,傻瓜式下一步安装,之后配置系统环境变量即可;
python基础语法:
python编程:
交互式编程:在安装了python的机器上打开终端,输入python命令即可进入交互模式,输入print "Hello World!"按下回车即可打印Hello World!;
脚本式编程:python文件的后缀扩展名是.py;执行时,只需要输入 python test.py即可执行;
python标识符:数字,字母,下划线(比java少一个$符),首字符不能是数字;
行和缩进:python不使用大括号{}来控制定义类,函数以及其他代码块,而是使用缩进来控制,所有代码块必须包含相同数量的缩进空白;
引号:python可以使用单引号,双引号,三引号来表示字符串;
注释:python单行注释是使用"#"号,多行注释使用三个单引号或三个双引号;
空行:空行并不是python语法的一部分,空行的作用在于分割两端不同功能的代码,便于代码阅读维护;
print输出:print默认输出是换行的,如果要实现不换行可以在变量末尾加上逗号;
变量:python中的变量不需要声明类型,每个变量在使用前必须赋值;赋值后该变量才会被创建;
标准数据类型:
Python有五个标准数据类型:Numbers(数字),String(字符串),List(列表),Tuple(元组),Dictionary(字典);
数字:python支持四种不同的数字类型:int,long,float,complex(复数:复数由实数部分和虚数部分构成,z=a+bi);
del语句:语法,del var;del语句可以删除一些对象的引用,相当于java中给变量赋值null;del不仅可以删除普通对象引用,还可用于列表操作,删除一个或几个元素;
var = 1;
var1 = 2;
del var;#删除var指向1的引用;类似java中的赋值null操作;
python提供了丰富的函数库,数学运算常见的函数基本都在math,cmath模块中;在使用这个相关的方法前需要先导入对应的函数模块,导入语法如下:
import math
字符串:python字符串取值有两种方式,从左到右索引(从0开始)和从右到左的索引(从-1开始);字符串截取使用[1:3],范围左闭右开;
python不支持单字符,单字符也作为一个字符串使用;
var = 'Hello World!'
var1 = "Hello Python!"
print "输出:",var[:6]+var[6:12]*2
输出结果为:输出:Hello World!World!
#python 三引号,允许一个字符串(字符串中可以包含换行符等特殊字符)跨多行(所见即所得)
var2 = '''hi
hello'''
print var2
输出为:
hi
hello
常见的字符串运算符:
+ :字符串连接;
* :重复输出字符串
[] :通过索引获取单个字符
[:] :截取字符串的一部分
in :字符串中包含给定的字符返回true
not in : 字符串中不包含给定的字符返回true
% :格式化字符串(占位符),类似于c语言中的sprintf函数中的格式化;%d,%s,%p
字符串内建函数:实现了string大部分方法,例如:string.endswith(str,0,3)
print 'abc'.endswith('c')
输出 true
列表:python有6个序列的内置类型,但是最常见的是列表和元组;
List是Python中使用最频繁的数据类型;列表里可以存放大多数数据结构;列表用[]标识,元素之间用逗号分隔,取值方式和字符串类似;列表中的数据项不需要具有相同的类型;
访问列表中的元素和字符串操作类似,也是通过[下标]来访问的,也可以通过[:]进行截取;可以使用append方法对列表进行新增;我们也可以使用del对列表中的元素进行删除,或者直接删除整个列表;
list = [1,2,3]
list2 = ["a","b","c"]
list3 = [1,"a","abc"]
print list3[1:3]
list3.append('abcd')
del list3[3]
del list3
python提供了一些常见的函数来操作列表:
cmp(list1,list2) :比较函数
len(list) :返回列表的长度
max(list):返回列表中的最大值
min(list):返回列表中的最小值
list(seq):将元组转化成列表
python还提供了一些方法对列表进行增删查,排序,反转等操作;语法:list.append("abc"),list.index("abc")等;
元组:元组类似List,不同之处在于元组的元素不能修改,相当于只读列表;元组用()标识,列表yong[]标识;内部元素用逗号隔开;
tup = (1,2,3)
tup1 = ("ab","abc")
tup2 = (1,2,"ab","abc",3)
tup3= (1,)#只包含一个元素时,需要添加逗号
元组中的元素操作和列表类似,有一点要注意,元组中的元素是不允许修改的,tup1[0]='a'这个操作是非法的;
元组中的函数和方法和列表提供的类似,此外元组提供了将列表转化成元组的方法:tuple(seq);
字典:字典是python中除列表外最灵活常用的数据类型;字典是无序的对象集合,用{}标识,由key:value键值对组成,键值对中间用都逗号分隔;类似java中的Map集合;
dict = {'a':1,'b':2}
print dict['a']
del dict['a']
可使用del删除字典中的某一条目;
字典相关方法:
cmp(dict1,dict2) :比较两个字典元素
len(dict):获取字典中条目个数
str(dict):打印字典中的字符串
type(dict):返回给定对象的类型
dict.clear():删除字典内的所有元素
dict.copy():浅拷贝一个字典对象
dict.has_key(key):给定键是否在字典里
dict.items():获取字典中可遍历的键值对列表
dict.keys()/values():获取字典中的所有键/值
dict.pop(key):删除字典中的某个条目
dict.popitem()返回并删除字典中的最后一个键值对
python数据类型转换:有时候我们需要类型转换,只需要将数据类型作为函数名即可;例如:list(s)将序列s转换为一个列表;
python运算符:python运算符和java,c等常见语言的运算符大部分都相同,下面只介绍不同的部分:
算数运算法:幂运算符 **,a**b表示a的b次幂;取整除 //,返回商的整数部分,向下取整;
逻辑运算符:与 and,或 or,非 not;
成员运算符:in /not in:a in list ,a是否在list中,在返回true,反之;
身份运算符:is/is not;用于判断两个标识符是否引用同一个对象;
python语句:
条件语句:非0和非空值为true;不支持switch语句;判断条件有个值时,可以使用 if...:elif...:elif...else:的形式;
python循环语句:python提供了for,while循环,不支持do...while循环;循环控制语句,break,continue用法和java一样;pass:pass是空语句,为了保持程序结构的完整性;for循环示例:
for fruit in fruits:
print '当前水果 :', fruit
python日期和时间:
python提供了time和calendar模块用于格式化日期和时间
import time #导入time模块
time1 = time.time()
time2 = time.localtime(time.time())
print "当前时间戳为:" ,time1
print "本地时间为:",time2
输出为:
当前时间戳为: 1609817493.38
time.struct_time(tm_year=2021, tm_mon=1, tm_mday=5, tm_hour=15, tm_min=10, tm_sec=42, tm_wday=1, tm_yday=5, tm_isdst=0)
获取格式化的时间:
最简单的获取可读的时间函数asctime()
import time
time1 = time.asctime(time.localtime(time.time()))
print time1
输出结果:
Tue Jan 5 15:15:16 2021
time模块的strftime可以用来格式化日期
import time
time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
print time
#将格式化字符串转换成时间戳
print time.mktime(time.strptime(time,"%Y-%m-%d %H:%M:%S"))
输出结果:
2021-01-05 15:37:48
1609832268.0
time.sleep(secs)#可以延迟线程的执行
我们可以使用calendar模块来处理日历相关的场景:
import calendar
month = calendar.month(2014,7)
print month
输出结果:
July 2014
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
calendar.isleap(year)#判断是否是闰年
python函数:
和java方法功能类似,python函数用来提高代码的重用性;函数代码块以def开头,后接函数名和(),()中间可以定义参数,函数内容以冒号起始,函数结尾可以选择性的选择return语句:
def printname(str):
print str
return
printname("Hello Python!")
输出结果:
Hello Python!
参数传递:
在python中,变量是没有类型的,类型属于对象;关于python函数传参的方式:我们知道c语言函数传参有两种方式:值传参,和地址传参;java方法传参是值传参(因为引用类型变量本身就是一个地址);python函数传参方式和java类似;
参数:python传递参数比较灵活,按照定义可以分为以下四种类型:
必备参数:如果函数定义时有参数,则调用时必须传递参数;
关键字参数:使用关键字允许调用时传参顺序和声明时的顺序不一致,python编译器会根据参数名称匹配值;
默认参数:函数定义时参数可以有默认值;
不定长参数:*varargsname
def pringname(name,age=18,*var):
print name
print age
return
printname(age=20,name="li")
匿名函数:python支持lambda表达式来创建匿名函数:
sum = lambda arg1,arg2:arg1+arg2
print sum(1,2)
变量作用域:全局变量,局部变量;函数内的变量拥有一个局部作用域;如果要在函数内给全局变量赋值,需要使用global语句:global varname;该表达式会告诉python,varname是一个全局变量;
python模块:
python模块是一个python文件,文件后缀.py;模块中能定义类,函数,和变量;
printname.py模块
def printname(str):
print str
return
def printname1(str)
pirnt 'Hello',str
import语句:如果我们想用printname模块中的方法,需要使用import语句导入printname模块,方法调用格式:模块名.方法名:
import printname
printname.printname('Hello Python!')
from...import语句:该语句可以让你从一个模块中导入一部分到当前命名空间:
from printname import printname1
这个声明只会把printname模块中的printname1方法引入到执行这个声明模块的全局符号表;当然可以使用from printname import *可以导入全部;
dir()函数:可以通过dir()函数返回一个模块里定义过的名字,模块,变量和函数;
系统定义了一些特殊的字符串变量:__name__指向模块的名字;__file__指向该模块的导入文件名;
python中的包:包是一个分层次的目录结构,该目录下必须存在__init__.py文件(文件夹内容可以为空),该文件标识当前文件夹是一个包;
python文件IO
下面简单介绍下文件基本io操作;
print()函数:输出字符串到标准输出
从键盘读取内容:raw_input,input;区别,input可以接受一个python表达式作为输入,并将计算结果返回;
str=input("请输入:")
#此时在控制台输入[x*5 for x in range(1,10,2)]
print str
输出为:
[5, 15, 25, 35, 45]
打开和关闭文件:
python提供了file对象对文件进行基本的操作,获取file对象需要调用open()函数打开一个文件,类似于c语言中的文件操作:
file object = open(file_name[,access_mode][,buffering])
file_name:文件名
access_mode:访问模式
buffering:设置是否使用缓存;0表示不使用缓存;1表示使用行缓存;大于1的值表示设置缓存区的大小,-1表示缓存大小使用默认值;
持续更新中。。。