Python学习日记(一)
前言
其实在16年以前就听说过Python,并且那时候学了一个快速教程。也就按教程写写爬虫这样子。
其实到今天也差不多都忘光了。
在这一年的时间里,Python被越来越多的提起,无论在哪都能看到Python的身影。这又激起了我对Python的兴趣,深入了解一下,发现Python居然能做如此多的东西,简直就是全栈了。既然如此,那更要学习了。
其实很想系统的学习一下,但很尴尬,手头上并没有那么多钱可以让我报班学习,所以也就只能在网上看看盗版视频学习了。
其实感觉很对不起这些讲课的老师,以后有条件了的话,一定要报一次他们的班。
好了废话不多说,我想把这次学习Python的经历记录起来。一来是能够对学过的知识做一次巩固,二来这也是我人生中第一次写博客,可以激励我寻找问题的解决方法,并记录在博客中,希望能坚持下来。
这次的学习日记主要是参考Alex老师的博客:
http://www.cnblogs.com/alex3714/articles/5465198.html
一、Python是一门动态解释性的强类型定义语言
编程语言主要在以下几个角度进行分类:
编译型和解释型、静态语言和动态语言、强类型语言和弱类型语言
编译型:
编译器将源文件每一条我们所能理解的语句,编译成机器语言,并保存为二进制文件。计算机可以直接以机器语言运行此程序,因此速度很快。
优点:
因为编译只进行一次,运行时不用编译,所以编译型语言的程序运行效率较高。
缺点:
如果对源文件进行修改,需要重新进行编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件,移植性不好。
解释型:
解释型语言必须要有一个解释器,当程序执行时,该解释器一条一条的将源文件解释成计算机所能理解的机器语言来执行,所以运行速度不如编译型语言运行的快。
优点:
可移植性强(前提是安装了虚拟机)。修改代码的时候可以直接修改,可以快速部署,不用停机。
缺点:
每次运行时都要进行一次解释,效率性能比不上编译型语言。
动态语言:
动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python
静态语言:
静态语言的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型。Java
强类型语言:
强制定义数据类型的语言。除非强制转换,否则一个变量一旦被指定了某种数据类型,就不会发生改变。Python Java
弱类型语言:
忽略数据类型的一种语言。变量的数据类型可以随便换。JavaScript
二、变量
定义变量不需要指定数据类型
变量名只能是字母、数字或下划线的任意组合
变量名第一个字符不能是数字
以下关键字不能声明为变量名:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
Python3支持中文变量,不过不要用,很Low(哈哈哈哈哈哈哈)。
三、字符编码
Python解释器在加载.py文件时,会对内容进行编码(默认ASCll),所以当有中文的时候会报错。

在程序前加一句# -*- coding:utf-8 -*-,解释器则会使用utf-8进行编码,中文不会乱码。


中文编码的发展
ASCll-->GB2312-->GB18030-->UTF-8
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
四、注释
单行注释:
#注释内容
‘’’注释内容’’’
五、用户输入
变量名 = input(“提示”)
输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法
password = getpass.getpass("请输入密码:")
六、模块
其实早在接触Python之前就听说Python有很多很强大的第三方库,可以用很短的代码量写出功能很多的程序。很优雅。这大概就是Python的库的功能了吧。
根据老师的博客,接触两个简单的标准库。
sys:
import sys
import sys print(sys.argv) #sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径


关于sys.argv的用法详解:http://blog.csdn.net/sxingming/article/details/52074311
os:
#!/usr/bin/env python # -*- coding: utf-8 -*- import os os.system("df -h") #调用系统命令
完全结合:
import os,sys os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行
模块也可以自己写,当然你写个helloworld.py然后再调用打印出”HelloWorld”,也是可以的。
但是写完该模块后,会发现只能在当前目录下import。
如果想在系统任何一个地方都能使用,就要把这个py文件放到Python全局环境变量的目录里:Python36\Lib\site-packages。这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。
七、PYC
C为compiled,也就是编译的英文。如果Python为解释型语言,那么应该不会有pyc文件的存在,那么pyc文件又是个什么东西呢?
其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。 当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
Python的运行过程:
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
八、数据类型
1、Int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
自Python2.2起,如果整数发生溢出,Python会自动将整型数据转换为长整型。(但在Python3中好像没有整型和长整型之分,好像好像,记得不是很清楚了。)
Python没有限制长整型数值的大小,但实际上由于机器内存有限,我们使用的长整型不可能无限大。
2、float(浮点型)
老师上课的时候说过,浮点型并不全部都是小数。但不往深处去想的话,可以理解为小数就是浮点型,哈哈。
3、布尔值
True 、 False
0 、1
4、字符串
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
提一下格式化输出:
name = "1liangxi" age = 22 print("My name is %s,Age:%d"%(name,age)) # 输出:My name is 1liangxi,Age:22 print('''My name is %s,Age:%d '''%(name,age)) # 输出:My name is 1liangxi,Age:22 print("My name is {},Age:{}".format(name,age)) # 输出:My name is 1liangxi,Age:22 print("My name is {1},Age:{0}".format(name,age)) # 输出:My name is 22,Age:1liangxi print("My name is {username},Age:{user_age}".format(username = name,user_age=age)) # 输出:My name is 1liangxi,Age:22
%s:字符串 %d:整数 %f 浮点数
字符串常用功能
(1)移除空白 .strip( )
(2)分隔 .split( )
(3)长度 len( )
(4)索引 index( )
(5)切片
5、列表
列表是[ ],并且里面的内容可以改变。
eg:
name_list = [“jhon”,”mike”,”bill”,”jack”] name[1] = “alex” print (name_list) #输出: #[“jhon”,”alex”,”bill”,”jack”]
列表基本操作:
(1)索引 index(obj):用于找出列表中与obj匹配的第一个值的下标
(2)追加 append(obj)
(3)删除
删除的三种方法:(1)del (2)列表.remove(下标) (3)列表.pop(下标,默认取出最后一个)
(4)长度len(列表)
(5)切片(顾头不顾尾)
(6)循环
(7)包含 extend(另一个列表)
(8)排序 sort()
(9)反向 reverse()
(10)元组转为列表 list(sed)
6、元组
元组是( ),并且元组里面的内容不可改变。
# -*- coding: utf-8 -*- name = ("jhon","alex","mike","jack","bill") name [2] = "1liangxi" print(name)

7、字典
字典是{ },并且字典是由无序的键值对组成的。
eg:
name = {"stu001":"1liangxi","stu002":"john","stu003":"mike"}
字典常用操作:
(1)索引 name[“syu001”]
(2)新增 (直接写键值对)
(3)删除 (1)del (2)dict.clear 清除字典里的元素 (3)pop(字典键) (4)pooitem()随机删除一对键值对
(4)键、值、键值对 键:dict.keys() 值:dict.values() 键值对:dict.items()
(5)循环
(6)长度 len(字典)
九、表达式if...else
eg:
i = 1 if i>1: Print (“i大于1”) else: Print(“i小于等于1”)
python里面的else...if被改为了elif,并且没有程序段不是用{ }括起来表示一段程序,而是使用语句前空格相同,则代表一段程序。
十、for循环
最简单的for循环一般与range()搭配使用。
eg:
for i in range(10)://循环十次 print(“i”)
continue:跳过该步循环,执行下一步循环。
break:结束该循环。
十一、while循环
count = 0 while True: #死循环 print(“count:”,count) count += 1
以上,算是基本了解了一下Python吧。
浙公网安备 33010602011771号