满足低调之心基础一

学Python第一周,接着就学习写自己的收获,理解和感悟。敲出print(“Hello Word!”)点击run的那一刻(仪式感很重要),感觉自己成为初入茅庐(Python)的白小白。呵呵。。。我真是太看得起自己了!不多bb,咱直捣京师。

Python之所以简单,与其创始人吉多·范罗苏姆Guido van Rossum)有直接关系(哈哈,这不废话),但我觉得也与Python(大蟒蛇的意思)字面意思有着间接的千丝万缕的联系。这就好比古代的高手剑客,往往起名叫什么东方不败,孤独求败等等之类的,只闻其名顿时就感心中寒光闪闪,更何况与他们过招几乎是一招毙命,从不纠缠。我擦,扯远了(哈哈),总之Python相对于其他的编程语言,确实简单了不少(反正我是信了,嘻嘻)。

一,Python主要应用的领域

1,Web 和 Internet开发
2,科学计算和统计
3,人工智能
4,桌面界面开发
5,软件开发
6,后端开发
7,网络爬虫
这其中最先映入大部分看客耳目的算是网络爬虫了(当然我就是),即使很久之前压根不懂Python,但网页上常常弹出的爬虫广告也依稀有所回忆吧!

二,Python是一门什么语言?

编程语言主要可以从以下角度进行分类:编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言,让我们来看看每种语言代表的意思。

编译型和解释性

我们先看看编译型,其实它和汇编型语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行。但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织。这时编译各个文件时就会生成目标文件(Object file)而不是前面说的可执行文件。一般一个源文件的编译都会对应一个目标文件。这些目标文件里的内容基本上已经是可执行代码了,但由于只是整个项目的一部分,所以我们还不能直接运行。等所有的源文件的编译都大功告成,我们就可以最后把这些半成品的目标文件"打包"成一个可执行文件,这个工作由另一个程序负责完成,由于此过程好像是把包含可执行代码的目标文件连接装配起来,所以又称为链接(Link),而负责链接的程序就叫…就叫链接程序(Linker)。链接程序除了链接目标文件外,可能还有各种资源,像图标文件啊、声音文件啊什么的,还要负责去除目标文件之间的冗余重复代码等等,所以………也是挺累的。链接完成之后,一般就可以得到我们想要的可执行文件了。

上面我们大概地介绍了编译型语言的特点,现在再看看解释型。噢,从字面上看,“编译"和"解释"的确都有"翻译"”的意思,它们的区别则在于翻译的时机安排不大一样。打个比方:假如你打算阅读一本外文书,而你不知道这门外语,那么你可以找一名翻译,给他足够的时间让他从头到尾把整本书翻译好,然后把书的母语版交给你阅读﹔或者,你也立刻让这名翻译辅助你阅读,让他一句一句给你翻译,如果你想往回看某个章节,他也得重新给你翻译。

这两种方式,前者就相当于我们刚才所说的编译型:一次把所有的代码转换成机器语言,然后写成可执行文件﹔而后者就相当于我们要说的解释型:在程序运行的前一刻,还只有源程序而没有可执行程序﹔而程序每执行到源程序的某一条指令,则会有一个称之为解释程序的外壳程序将源代码转换成二进制代码以供执行,总言之,就是不断地解释、执行、解释、执行…….所以,解释型程序是离不开解释程序的。解释型程序中,由于程序总是以源代码的形式出现,因此只要有相应的解释器,移植几乎不成问题。编译型程序虽然源代码也可以移植,但前提是必须针对不同的系统分别进行编译,对于复杂的工程来说,的确是一件不小的时间消耗,况且很可能一些细节的地方还是要修改源代码。而且,解释型程序省却了编译的步骤,修改调试也非常方便,编辑完毕之后即可立即运行,不必像编译型程序一样每次进行小小改动都要耐心等待漫长的Compiling…Linking…这样的编译链接过程。不过凡事有利有弊,由于解释型程序是将编译的过程放到执行过程中,这就决定了解释型程序注定要比编译型慢上一大截,像几百倍的速度差距也是不足为奇的。

动态语言和静态语言

通常我们所说的动态语言、静态语言是指动态类型语言和静态类型语言。

①动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python就是一种典型的动态类型语言。

②静态类型语言∶静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表。

强类型定义语言和弱类型定义语言

①强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

②弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反,一个变量可以赋不同数据类型的值。

强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言"与“这门语言是否类型安全"之间是完全没有联系的!
例如:Python是动态语言,是强类型定义语言(类型安全的语言);。

通过上面这些介绍,我们可以得出,python是一门动态解释性的强类型定义语言。那这些基因成就了Python的哪些优缺点呢?我们继续往下看。

三,Python的优缺点

先看优点:

1,Python的定位是"优雅"、“明确”、“简单",所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常复杂的程序。

2,开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。

3,高级语言——当你用Python语言编写程序的时候,你无需考虑如何管理你的程序使用内存一类的底层细节。

4,可移植性——由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上〉。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行。

5,可扩展性——如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

6,可嵌入性——你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。

再看缺点:

1.速度慢,Python的运行速度相比c语言确实慢很多,跟JAVA相比也要慢一些,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15~0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。

2.代码不能加密,因为Python是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现呀。

3.线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点。

当然,Python还有一些其它的小缺点,在这就不一一列举了,我想说的是,任何一门语言都不是完美的,都有擅长和不擅长做的事情,建议各位不要拿一个语言的劣势去跟另一个语言的优势来去比较,语言只是一个工具,是实现程序设计师思想的工具,就像我们之前中学学几何时,有的时候需要要圆规,有的时候需要用三角尺一样,拿相应的工具去做它最擅长的事才是正确的选择。

四,Hello World程序

print("Hello World!")
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
Hello World!

Process finished with exit code 0

哈哈哈,是不是感觉特别无聊!

五,变量/字符编码

变量定义的规则

1,变量名可以包括字母数字下划线,但是数字不能做为开头。例如: name1是合法变量名,而1name就不以。

2,系统关键字不能做变量名使用。例如(‘False’, ‘None’, ‘True’, ‘and’, ‘as’,‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’,‘while’, ‘with’, ‘yield’)

3,除了下划线之外,其它符号不能做为变量名使用.。

4,Python的变量名是区分大小写的。

变量的赋值

name = "Li Ming"
name2 = name

print(name,name2)

name = "Jack"

print(name)
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
Li Ming Li Ming
Jack

Process finished with exit code 0

字符编码

解释器在加载.py文件中的代码时,会对内容进行编码(默认ascill)

ASCll(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用8位来表示(一个字节),即:2**8 =256-1,所以,ASCIl码最多只能表示255个符号。

关于中文

为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE

GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312
ASCIIGB2312GBKGB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312GBKGB18030都属于双字节字符集(DBCS)。

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由16位来表示(2个字节),即:2**16 = 65536

注:此处说的是最少2个字节,可能更多,UTF-8是对Unicode编码的压缩和优化,它不再使用最少2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…

注释

单行注释:#被注释的内容

name = "Li Ming"
name2 = name

# print(name,name2)   

# name = "Jack"

print(name)

多行注释:""“被注释的内容”""

"""
name = "Li Ming"
name2 = name

print(name,name2)

name = "Jack"

print(name)
"""

六,用户输入

直接上例子

name = input("name:")
age = input("age:")
job = input("job:")

info = '''
----------- info of %s ----------
name:%s
age:%s
job:%s
''' % (name,name,age,job)

print(info)
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
name:li ming
age:18
job:IT

----------- info of liming ----------
name:liming
age:18
job:IT


Process finished with exit code 0

七,判断语句

if语句

if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……

teacher_age = 35
for i in range(3):
    guess_teacher_age = int(input("guess_teacher_age:"))
    if guess_teacher_age == teacher_age:
        print("恭喜你猜对了!")
        break
    elif guess_teacher_age > teacher_age:
        print("猜大了!")
    else:
        print("猜小了!")
else:
    print("你试了太多次抱歉要结束了!")

G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:15
猜小了!
guess_teacher_age:20
猜小了!
guess_teacher_age:30
猜小了!
你试了太多次抱歉要结束了!

Process finished with exit code 0

G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:30
猜小了!
guess_teacher_age:35
恭喜你猜对了!

Process finished with exit code 0


八,循环语句

while循环

while 判断条件(condition):
执行语句(statements)……

teacher_age = 35
count = 0
while count < 3:
    guess_teacher_age = int(input("guess_teacher_age:"))
    if guess_teacher_age == teacher_age:
        print("恭喜你猜对了!")
        break
    elif guess_teacher_age > teacher_age:
        print("猜大了!")
    else:
        print("猜小了!")
    count += 1
else:
    print("你试了太多次抱歉要结束了!")
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:32
猜小了!
guess_teacher_age:40
猜大了!
guess_teacher_age:37
猜大了!
你试了太多次抱歉要结束了!

Process finished with exit code 0

G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:36
猜大了!
guess_teacher_age:35
恭喜你猜对了!

Process finished with exit code 0

for循环

for 变量 in 列表:
过程
else:
过程
teacher_age = 35
for i in range(3):
    guess_teacher_age = int(input("guess_teacher_age:"))
    if guess_teacher_age == teacher_age:
        print("恭喜你猜对了!")
        break
    elif guess_teacher_age > teacher_age:
        print("猜大了!")
    else:
        print("猜小了!")
else:
    print("你试了太多次抱歉要结束了!")
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:39
猜大了!
guess_teacher_age:30
猜小了!
guess_teacher_age:34
猜小了!
你试了太多次抱歉要结束了!

Process finished with exit code 0

G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:40
猜大了!
guess_teacher_age:35
恭喜你猜对了!

Process finished with exit code 0

根据以上的例子,咱们免费升级为一个“任性”猜年龄玩法

teacher_age = 35
count = 0
while count < 3:
    guess_teacher_age = int(input("guess_teacher_age:"))
    if guess_teacher_age == teacher_age:
        print("恭喜你猜对了!")
        break
    elif guess_teacher_age > teacher_age:
        print("猜大了!")
    else:
        print("猜小了!")
    count += 1
    if count == 3:
        continue_guess = input("请问你是否还想玩?")
        if continue_guess != "n":
            count = 0
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
guess_teacher_age:15
猜小了!
guess_teacher_age:46
猜大了!
guess_teacher_age:30
猜小了!
请问你是否还想玩?
guess_teacher_age:33
猜小了!
guess_teacher_age:35
恭喜你猜对了!

Process finished with exit code 0

别说,循环这么玩是不是还蛮有乐趣的,嘻嘻!

九,break和continue的区别

continue:意思为只结束当前进行的这一次循环然后跳入下一次循环

break:意思为直接结束循环

来一个简单的例子

continue的例子

i = 0
while i < 10:
    i += 1
    if i == 6:  # 当i为6时,结束这一次循环跳入下一次循环
        continue
    print("i=%s" % i)
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
i=1
i=2
i=3
i=4
i=5
i=7
i=8
i=9
i=10

Process finished with exit code 0

这下彻底明白了吧,正因为当i为6时这一次的循环被continue结束了,接着跳入下一次的循环中,所以结果里没有打印i=6这一条。

break的例子

i = 0
while i < 10:
    i += 1
    if i == 6:  # 当i为6时,结束整个循环
        break
    print("i=%s" % i)
G:\Project1\venv\Scripts\python.exe G:/Project1/day1.py
i=1
i=2
i=3
i=4
i=5

Process finished with exit code 0

当i为6时,break结束了整个循环,所以只打印到i=5.

好了,这便是我第一周学的所有内容,希望各位看客大佬若发现有错误或不足,望能留言告知,我当不胜感激!

你可能感兴趣的:(基础,python)