python初探

Posted on 2017-05-19 14:27  青蛙一只  阅读(462)  评论(0)    收藏  举报

day0 : python初探

 

导读

语言分为静态语言和动态语言

(1)静态语言要求必须声明每个变量的类型:它会使用多少内存以及允许的使用方法。计算机利用这些信息把程序编译成非常底层的机器语言。(C、C++、Java)

优缺点:声明变量类型可以帮助计算机发现更多潜在的错误并提高运行速度,但是需要使用者进行更多的思考和编程

(2)动态语言(也被称为脚本语言)不需要在使用变量前进行声明动态语言不会被编译,而是由解释器程序来解释执行。(python、Perl、Ruby、PHP)

优缺点:动态语言通常比编译后的静态语言更慢,但是随着解释器的不断优化,动态语言的速度在不断提升。动态语言的主要应用场景都是很短的程序(脚本),比如给静态语言编写的程序进行数据预处理。这样的程序通常称为胶水代码。

执行过程对比:

 

C           编译——机器码——CPU

 

两步:第一步通过编译生成机器码,第二步通过CPU执行,由此可以看出C语言执行速度比python快

 

Cpython  C解释器——.pyc文件(字节码)——机器码——CPU

两步:第一步通过编译生成只有python认识的字节码,第二步执行时转换为机器码再通过CPU执行

注意:代码通过编译可以产生字节码,字节码经过反编译也可以得到代码

安装python

(1)在python官网上下载安装包。网址:https://www.python.org/

(2)安装。手动设置路径,注意勾上 Add Python3.5 to Path,如果没有这个选项则进行下一步

(3)配置环境变量

右键计算机——>属性——>高级系统设置——>高级——>环境变量——>在第二个内容框中找到变量名path的一行,双击——>在变量值中追加 ;python安装目录

如:原来的的值;E:\python_soft\new_python\

命令行模式和python交互模式

交互模式

命令行模式

更改盘符>>>更改路径(.py文件所在路径)>>>运行.py文件

 

python基本数据类型

python最基本的内置数据类型有:

1、布尔型(只有True和False两种取值)

2、整型int

3、浮点型float

4、字符串型str

 

变量命名规则:

变量名由数字、字母、下划线组成,第一个字符只能是字母或者下划线,关键字不能声明为变量名

1、布尔型:

2、整型:

(1)整型int功能介绍:

+ 加  —减  *乘  /浮点数除法  //地板除  %求余数(模)**求幂

age=18
print(type(age))
print(dir(age))
print(age.__abs__())  #返回绝对值
print(abs(age))
print(age.__add__(19)) #相加,等价于age+19
print(age.__bool__()) #返回对应的布尔值
print(age.__class__())
print(age.__eq__(19))  #判断两个数是否相等
print(age.__eq__(18))
print(age.__float__()) #int转化为float,只需要加上一位小数点
print(age.__floordiv__(4))  #地板除 ,相当于18//4=4
print(age//4)  #地板除
print(age%4)   #求余数
print(age.__divmod__(4))  #返回由商和余数构成的元组,用于分页
print(age.__ge__(3)) #判断age是否大于3
print(age.__ge__(30)) #判断age是否大于30
age=2
print(age.__pow__(5))  #求幂,相当于age**5
print(age**5)
a=10
b=50
print(a.__and__(b))#按位与,相当于a&b,结果为2
print(a&b)
print(a.__or__(b)) #按位或,相当于a|b,结果为58
print(a|b)
View Code

结果:

<class 'int'>
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
18
False
True
18.0
4
4
2
(4, 2)
True
False
32
32
2
2
58
58
View Result

(2)进制:

十进制    10 =10

二进制    0b10=2    0B10=2

八进制    0o10=8    0O10=8

十六进制 0x10=16   0X10=16

(3)类型转化

int()可以接受布尔值、浮点数、只包含数字的字符串;不能接受包含小数点或指数的字符串和普通字符串

如果混合使用不同的数字类型进行计算,python会自动进行类型转换

 3、浮点型float

(1)浮点型float功能介绍

x=10.6
print(type(x)) #查看x的类型
print(dir(x))   #查看创建x的类的所有成员
print(x.__divmod__(4)) #得到商和余数构成的元组
print(x.__floordiv__(4)) #地板除
print(x//4)     #地板除
print(x.__abs__()) #求绝对值
print(x.__add__(10.2))#求和
print(x+10.2)
print(abs(x))
print(x.__ge__(18))#判断是否大于18
print(x.__pow__(3))#求幂
print(x**3)
x=0.5
print(x.as_integer_ratio()) #求最简分数形式并写成由分子分母构成的元组
View Code

 结果:

<class 'float'>
['__abs__', '__add__', '__bool__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getformat__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__int__', '__le__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__pos__', '__pow__', '__radd__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rmod__', '__rmul__', '__round__', '__rpow__', '__rsub__', '__rtruediv__', '__setattr__', '__setformat__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', 'as_integer_ratio', 'conjugate', 'fromhex', 'hex', 'imag', 'is_integer', 'real']
(2.0, 2.5999999999999996)
2.0
2.0
10.6
20.799999999999997
20.799999999999997
10.6
False
1191.0159999999998
1191.0159999999998
(1, 2)
View Result

 (2)类型转化

float()可以接受布尔值、整型、包含有效浮点数的字符串

 4、字符串型

(1)字符串型功能介绍

name="jack"
print(len(name))  #获取字符串长度
print(type(name))  #相当于name.__class__,获取创建对象的类
print(dir(name))   #获取创建对象的类的所有成员

name2="michael"
#拼接两个字符串的三种方式:
print(name+name2)   #str1+str2
print(name.__add__(name2)) #str1.__add__(str2)
name_list=[name,name2]
print("".join(name_list)) #string.join(str_list)

# 使用*复制
print(name * 2 + name2 * 3)

#判断字符串中是否包含某个子串  str.__contains__(substr)
print(name.__contains__("er"))
print(name.__contains__("ex"))

#判断两个字符串是否相等  str1.__eq__(str2)
print(name.__eq__(name2))

#format 的两种用法(具体解释在函数的动态参数部分)
#str.format(*args,**kwargs)动态参数:元组(序列)和字典
s="{0} love {1} and {name1} love {name2}"
result=s.format("I","you",name1="you",name2="me")
print(result)
name_list=("I","you")
name_dict={"name1":"you","name2":"me"}
result=s.format(*name_list,**name_dict)
print(result)

#通过索引获取字符串某个元素
name="alex"
print(name[0])
print(name[-1])
print(name[-2])
# print(name[100])  超出索引报错
#name[0]="y"   字符串是不可变的,无法直接插入字符或者改变指定位置的字符

#为了改变字符串需要组合使用一些字符串函数
#如replace(self,old,new,count)
name="alexalexalex"
result=name.replace("a","y")#默认把所有的‘a’全改为‘y’
print(result)
result=name.replace('a','y',1)#s设定只改一个
print(result)

#大小写和对齐方式
name="jack tom MichAel kangKang"
print(name.capitalize())# 首字母大写,其他字母都小写
print(name.title()) #所有单词开头字母变大写,其他字母都小写
print(name.upper())#所有字母变大写
print(name.lower())#所有字母变小写
print(name.swapcase()) #所有字母大小写转换
#center(self,width,fillchar)   居中
#ljust(self,width,fillchar)    左对齐
#rjust(self,width,fillchar)    右对齐
name="jack tom MichAel kangKang"
print(name.center(40,"&"))
print(name.ljust(40,"*"))
print(name.rjust(40,"$"))

#获取某个子串在字符串中的个数count(self,x)
name="jack tom MichAel kangKang"
print(name.count("e"))
print(name.count("an"))

#获取某个子串在字符串中的位置:find和index
# find(self,substr)没有找到返回-1,index(self,substr)没有找到报错
print(name.find("tom"))
print(name.index("tom"))
print(name.find("lala"))
# print(name.index("lala"))

#查看字符串是否以某个子串开头或结尾
#startswith(self,substr,start,end)  endswith(self,substr,start,end)
name="jack tom MichAel kangKang"
print(name.startswith("tom",5,10))
print(name.startswith("tom"))
print(name.endswith("kangKang"))
print(name.endswith("tom",0,8))

#编码解码___________未完待续。。。。。。
name="张三"
result=name.encode("gbk")
name2=result.decode("gbk")
print(name,result,name2)

#expandtabs(self,tabsize)把tab键转化为若干个空格,默认是8个
name="a\tbcd"
print(name.expandtabs(8))
print(name.expandtabs())

#字符串的几个判断
name.isalnum() #判断是否是字母或者数字
name.isalpha() #判断是否都是字母
name.isdecimal() #判断是否只有十进制数字
name.isdigit() #判断是否都是数字
name.islower() #判断是否都是小写
name.isupper() #判断是否都是大写
name.isnumeric() #判断是否是数字
name.isspace() #判断是否是空格
name.istitle() #判断是否是标题

#使用strip 出除开头或者末尾的子串,默认去除空白字符串(空格、换行符、制表符)
name="\t\n   jack %%%%"
print(name.strip())
print(name.lstrip())
print(name.rstrip('%'))

#使用join拼接 string.join(list)
name_list=["kangkang","jack","lux"]
result=",".join(name_list)
print(result)

#分割字符串:split和partition
#split(self,sep,maxsplit) 可以不指定分隔符(默认使用空白字符串分割)可以指定分隔次数(默认全分隔),不包含分隔符,返回一个列表
#partition(self,sep) 必须指定一个分隔符,以第一个分隔符开始分隔,返回一个元组:(分隔符左边子串,分隔符,分隔符右边子串)
name="kangkang..jack..lux..tom..lili"
print(name.split(".."))  # ["kangkang","jack","lux","tom","lili"]
print(name.split("..",2)) #分隔两次  ["kangkang","jack","lux..tom..lili"]
print(name.partition("..")) #("kangkang","..","jack..lux..tom..lili")
name="kangkang   jack\tlux\ntom"
print(name.split())  #不指定分隔符时默认是空白字符,结果:["kangkang","jack","lux","tom"]
#print(name.partition()) #出错,必须指定一个分隔符
#zfill(self,width) 在字符串前填充0达到宽度要求
name="jack"
print(name.zfill(20))

#maketrans 和translate形成对应表并做替换
str_example="this is string example ...wow!!!"
intab="aeiou"
outab="12345"
trantab=str.maketrans(intab,outab,"x")#形成对照表,移除'x'
result=str_example.translate(trantab)
print(result)  #result="th3s 3s str3ng 21mpl2 ...w4w!!!"
View Code

 结果:

4
<class 'str'>
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
jackmichael
jackmichael
jackmichael
jackjackmichaelmichaelmichael
False
False
False
I love you and you love me
I love you and you love me
a
x
e
ylexylexylex
ylexalexalex
Jack tom michael kangkang
Jack Tom Michael Kangkang
JACK TOM MICHAEL KANGKANG
jack tom michael kangkang
JACK TOM mICHaEL KANGkANG
&&&&&&&jack tom MichAel kangKang&&&&&&&&
jack tom MichAel kangKang***************
$$$$$$$$$$$$$$$jack tom MichAel kangKang
1
2
5
5
-1
True
False
True
True
张三 b'\xd5\xc5\xc8\xfd' 张三
a       bcd
a       bcd
jack %%%%
jack %%%%
    
   jack 
kangkang,jack,lux
['kangkang', 'jack', 'lux', 'tom', 'lili']
['kangkang', 'jack', 'lux..tom..lili']
('kangkang', '..', 'jack..lux..tom..lili')
['kangkang', 'jack', 'lux', 'tom']
0000000000000000jack
th3s 3s str3ng 21mpl2 ...w4w!!!
View Result

 

(2)使用[start:end:step]分片
# [:]提取从开头到结尾的整个字符串
# [start:]从start提取到结尾
# [:end]从开头提取到end-1
# [start:end]从start提取到end-1
# [start:end:step]从start提取到end-1,每step个字符提取一个

(3)类型变换