Python基础1(2017-07-16)

  先墨守常规写一个简单的hello world!这是所有语言学习的第一点。

Python Hello world
1 name="hello world!"
2 print(name)

  如上代码我们可以看到name="hello world !",是申明了一个变量,变量名是name,并且赋值"hello world !"

  我们可以执行这个.py 文件试试。

  

  可以看到一个简单的小程序就已经运行了,屏幕输出了hello world!

  附上本人使用的python版本:

  

  变量定义的规则:

    • 变量名只能是 字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
      ['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']

  注释

  单行注释:#

  多行注释:'''备注是内容'''也可以是"""内容"""(单引号或者双引号)。

   用户输入

1 name=input("What's your name ?")
2 print("Hello",name,", welcome to Python !")
View Code

  本人选用的pycharm来执行语句

  

  运行如下:  手动输入名字时敲下回车,程序执行结果。

  

  通常有些情况下我们要输入密码,不让其显示出来,我们就需要导入一个模块getpass

1 import getpass
2 pwd = getpass.getpass("Please enter your password:")
View Code

  这个程序需要在CMD里面运行.

  模块初识

  Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。

1 import sys
2 print(sys.argv)
View Code

  这个运行会显示出文件地址。

  其实我们所写的任何一个.py程序代码都可以当做模块给其他.py文件进行调用。此时只需要我们将文件放到python专门放置模块的文件夹目录,即python的全局环境变量里面就可以了。基本是在一个叫Python36Libsite-packages的路径下。

  这时我们可以在同路径下的__pycache__文件夹下发现一个同名的.pyc文件。

  .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不是已经失效了么?程序再次去寻找pyc还有意义么?这样系统逻辑流程不是不对了?

事实上系统流程没有变,运行的时候程序会记录一下最后一次修改的时间跟pyc文件生成时间就行比对,一个小小的判断便很轻松的解决掉上述的问题。

数据类型简介

    整型&长整型&浮点型

    首先python3开始已经不存在python2的那种,如果数据过大会从int型转换为long型,看张图就明白了.

    
1 a=2**100
2 print(type(a))
3 b=2.1893411381
4 print(type(b))
View Code

    

    布尔值

    真或假

    1 或 0
 
    字符串
    这边要提醒的是python的字符串在C语言中体现为一个字符数组,每次创建字符串时都是需要新开辟一段联系的内存空间,并且一旦修改字符串的话,就需要再次开辟空间,更重要的万恶的+出现一次就会从内存中占用一段连续的内存空间。切记慎用字符串拼接!
 
    
    字符串格式化输出
    ps:字符串是%s,整数是%d,浮点数是%f
    下面的代码,呈现了3种方式来进行字符串格式化输出
    
 1 name = input("name:")
 2 age = int(input("age:"))
 3 print(type(age))
 4 salary = input("salary:")
 5 company = input("company:")
 6 
 7 info1 = '''------employee information1 (%s)---------
 8 name:%s
 9 age:%d
10 salary:%s
11 company:%s
12 ''' % (name , name , age ,salary ,company )
13 print(info1)
14 
15 info2 = '''------employee information2 {_name}---------
16 name:{_name}
17 age:{_age}
18 salary:{_salary}
19 company:{_company}
20 '''.format(_name=name,
21            _age=age,
22            _salary=salary,
23            _company=company)
24 print(info2)
25 
26 info3='''------employee information3 {0}---------
27 name:{0}
28 age:{1}
29 salary:{2}
30 company:{3}
31 '''.format(name,age,salary,company)
32 print(info3)
33 
34 """也可以一直用3个单引号截断 再用加号拼接,不过会占用好几块内存,不推荐试用"""
View Code

    逻辑运算表达式简介

    If...else..

    
1 actual="Y"
2 guess=input("Do you trust me ?(Y/N)")
3 if actual==guess:
4     print("Thanks !")
5 else:
6     print("No, you will regret it !")
View Code

    再来一个带elseif的实例

    
1 actual_age=25
2 guess_age=int(input("Guess how old were I ?"))
3 if actual_age==guess_age:
4     print("Yes , you are right !")
5 elif actual_age>guess_age:
6     print("Nope, greater than your guessing. ")
7 else:
8     print("Nope, smaller than your guessing ")
View Code

    这里涉及到一个输入的数据类型转换a=int(input("***"));

    While语法:这时候我想让系统只给用户3次机会来玩这个游戏超过3次显示猜测次数过多,怎么做呢?

    
 1 actual_age=25
 2 count=0
 3 while count<3:
 4     guess_age=int(input("Guess how old were I ?"))
 5     if actual_age==guess_age:
 6         print("Yes , you are right !")
 7         break
 8     elif actual_age>guess_age:
 9         print("Nope, greater than your guessing. ")
10     else:
11         print("Nope, smaller than your guessing ")
12     count+=1
13 if count==3:
14     print("You have tried too many times.")
View Code

    Else讲解:这里重点说一下最后的count==3的问题,其实作为一门更优美更简介的语言,python提供了另外一个写法

    
 1 actual_age=25
 2 count=0
 3 while count<3:
 4     guess_age=int(input("Guess how old were I ?"))
 5     if actual_age==guess_age:
 6         print("Yes , you are right !")
 7         break
 8     elif actual_age>guess_age:
 9         print("Nope, greater than your guessing. ")
10     else:
11         print("Nope, smaller than your guessing ")
12     count+=1
13 else:
14     print("You have tried too many times.")
View Code

    如果此时希望让系统没输入3次就提示问一下要不要继续玩下去,又该怎么做呢?

    
 1 count=0
 2 myage=25
 3 while count <3:
 4     guessage=int(input("Guess my age :"))
 5     if guessage==myage:
 6         print("Yes, you got it !")
 7         break
 8     elif guessage>myage:
 9         print("come on ! That's too old !")
10     else:
11         print("um, thanks for your appreciation but i am not a child")
12     count=count+1
13     if count==3 :
14         continue_guessing=input("Do you wanna play this game contineously ?(Y/N) :")
15         if continue_guessing=="Y":
16             count=0
17         else: print("Thanks for your playing .")
View Code

    For语法:

    首先来个简单的循环10次的语法:

    
1 for i in range(10):
2     print("This is for rotation : ",i)
View Code

    输出结果:

    This is for rotation : 0
    This is for rotation : 1
    This is for rotation : 2
    This is for rotation : 3
    This is for rotation : 4
    This is for rotation : 5
    This is for rotation : 6
    This is for rotation : 7
    This is for rotation : 8
    This is for rotation : 9

    此时想让这个程序隔一个数字输出一次,我们该怎么做?这里就不卖关子了,直接贴上python的语法

    
1 for i in range(0,10,2):
2     print("This is for rotation : ",i)
View Code

     大家现在应该能猜到怎么使用for语法了

     for i in range(x,y,z)

     默认的z不输入是1,x是起始位置,y是循环的终点,z是每次循环的跨度。

     所以我们可以写这样一句来代替

for i in range(1,10,2):
    print("This is for rotation : ",i)

     我想大家都应该知道输出结果是什么了

 This is for rotation : 1
 This is for rotation : 3
 This is for rotation : 5
 This is for rotation : 7
 This is for rotation : 9

    break与continue:

    在返回到for循环的第一个语法,如果想让系统在大于7的时候直接跳出不循环,并且3的时候也不输出结果,如何实现?

    
1 for i in range(10):
2     if i>7:
3         break
4     elif i==3:
5         continue
6     else:
7         print("This is for rotation : ",i)
View Code

 

原文地址:https://www.cnblogs.com/wuzdandz/p/7192462.html