python的学习之路day2

1、什么是常量:

  常量在程序中是不变的量

  但是在python中所有的变量都可以改

  注意:为了防止区分错误,所以python中常量使用大写命名

  例如:

    MYSQL_CONNECTION = '192.168.1.2'

 

2、python的标准库:

  导入方法:import 库名

 

3、如何装python的第三方库

  安装python后再cmd命令界面会增加一个命令 pip

  安装python各种模块的命令:

    pip install pandas  注意:pandas是第三方库名

 

4、在windows下多版本下python的pip区分方法

  python2 -m pip -h

  python3 -m pip -h

  pip是一个package可以直接通过Python调用

  或者:pip2、pip3也可以

  前提:请配置好双版本的环境变量

 

 5、pyc是什么鬼:

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

  

2. 解释型语言和编译型语言 

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

 

3. Python到底是什么 

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java

java hello

 

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

4. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

 
pyc是什么鬼

 

6、查看数据类型:

  (1)、例如:type(2**31)

  (2)、在python3中全是int,没有什么长整型

  (3)、布尔值

    真或假

    1真0假,True真 False假

    一个简单的真假判断语句:

      输入:0 == True  意思是 “0 等于True吗,答案当然是假。所以输出False”

      输出:False

      输入:0 == False  意思是“0等于False吗,答案当然是真,所以输出True”

      输出:True

 

7、格式化字符串输出:

  name = "smelond"

  print ("i am %s" % name)

 

8、列表:

  在其他语言中叫数组,但是在python中叫做列表

  使用方法:

    age = 16

    name = ["smelond","jack","amanda",16,age]

    print(name)

    输出:["smelond","jack","amanda",16,age]

  注意:用逗号隔开的内容叫做元素,而且每个元素必须用逗号隔开,所以数字是不需要引号的,而且我么可以看到列表中什么都可以存,包括变量

  如果只取前面两个元素:

    print(name[0:2])  这个叫做切片,(python从0开始)

    输出:["smelond","jack"] 

    注意:为什么是0:2而不是0:1呢,因为python顾头不顾尾,他包含0,但是不包含最后的哪一个值

  取最后三个print(name[-3:])

  取amanda的m

    print(name[2:][0][1])

  修改列表中的元素:

    name[1] = "small_melon"

    print(name)

    输出:["smelond","small_melon","amanda",16,age]

  插入元素到列表:

    name.insert(2,'jack')  插入jack到amanda前面,因为我查入的是第三个位置,所以输入二,insert是插入的意思

  在最后追加一个值:

    name.append("alex")  

  删除一个元素:

    name.remove("alex")

  步长:

    print(name[0:-1:2])  这个被称为步长,最后一个2代表每隔2个元素打印一次,默认就是一步

    print(name[::2])   这种效果和上面面差不多,如果是从0开始,可以把0省略不写

 

9、元组

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

语法

  names = ("alex","jack","smelond")

它只有2个方法,一个是count,一个是index。 

 

9、strip()方法

  可以脱掉前后的空格或tab,默认是空格,也可以指定strip(" ")

  例如:

user = input("user:")
if user == "smelond":
    print("welcome")
else:
    print("error")
打印:user:smelond(空格)
    error    #因为我们在后面输入了一个空格,所以错误

user = input("user:")
if user.strip() == "smelond":    #这个地方使用了strip,strip默认可以空格tab
    print("welcome")
else:
    print("error")
打印:user:smelond(空格)
    welcome    #使用strip脱了之后,就登陆成功了
strip

 

10、split()方法

  切片 可以以任何方式切片

  语法:

str = "smelond,amanda,test"
print (str.split(","))

['smelond', 'amanda', 'test']

 

11、join()方法

  将序列中的元素以指定的字符连接生成一个新的字符串

  语法:

name = ["smelond", "amanda", "test"]
print("|". join(name))

smelond|amanda|test

 

12、字符串操作

特性:不可修改 

name.capitalize()  首字母大写
name.casefold()   大写全部变小写
name.center(50,"-")  输出 '---------------------Alex Li----------------------'
name.count('lex') 统计 lex出现次数
name.encode()  将字符串编码成bytes格式
name.endswith("Li")  判断字符串是否以 Li结尾
 "Alex\tLi".expandtabs(10) 输出'Alex      Li', 将\t转换成多长的空格 
 name.find('A')  查找A,找到返回其索引, 找不到返回-1 

format :
    >>> msg = "my name is {}, and age is {}"
    >>> msg.format("alex",22)
    'my name is alex, and age is 22'
    >>> msg = "my name is {1}, and age is {0}"
    >>> msg.format("alex",22)
    'my name is 22, and age is alex'
    >>> msg = "my name is {name}, and age is {age}"
    >>> msg.format(age=22,name="ale")
    'my name is ale, and age is 22'
format_map
    >>> msg.format_map({'name':'alex','age':22})
    'my name is alex, and age is 22'


msg.index('a')  返回a所在字符串的索引
'9aA'.isalnum()   True

'9'.isdigit() 是否整数
name.isnumeric  #检测字符串是否只由数字组成
name.isprintable  #判断是否为可打印字符串
name.isspace  #检测字符串是否只由空格组成
name.istitle  #检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
name.isupper  #方法检测字符串中所有的字母是否都为大写
 "|".join(['alex','jack','rain'])
'alex|jack|rain'


maketrans
    >>> intab = "aeiou"  #This is the string having actual characters. 
    >>> outtab = "12345" #This is the string having corresponding mapping character
    >>> trantab = str.maketrans(intab, outtab)
    >>> 
    >>> str = "this is string example....wow!!!"
    >>> str.translate(trantab)
    'th3s 3s str3ng 2x1mpl2....w4w!!!'

 msg.partition('is')   输出 ('my name ', 'is', ' {name}, and age is {age}') 

 >>> "alex li, chinese name is lijie".replace("li","LI",1)
     'alex LI, chinese name is lijie'

 msg.swapcase 大小写互换


 >>> msg.zfill(40)
'00000my name is {name}, and age is {age}'



>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'


>>> b="ddefdsdff_哈哈" 
>>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
True
关于字符串

 字符串提供的一些方法

>>> py = "I'm learning Python"
>>> py.lower()
"i'm learning python"
>>> py.upper()
"I'M LEARNING PYTHON"
>>> py.replace("learning","abc")
"I'm abc Python"
>>> py.replace(py,"^-^")
'^-^'
>>> py.find('P')
13

 

 

最后更新时间:2017-11-17-23:37:55

posted @ 2017-11-17 21:40  smelond  阅读(304)  评论(0编辑  收藏  举报