python基础

一、Python 是一门什么样的语言?

编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。

编译和解释的区别是什么?

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 

解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 

这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

编译器:把程序全部编译完执行,

解释器:边编译边执行。python属于解释型语言

编译型vs解释型

编译型

优点:会有一次预编译,编译只做一次,运行时不需要再编译,效率高,可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。(移植障碍)

解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

python是一门动态解释性的强类型定义语言

二、Python的优缺点

优点

1.Python的定位是“优雅”、“明确”、“简单”

2.开发效率非常高

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

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

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

6.可移植性

缺点

1.速度慢,解释型

2.代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的

3.线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。

三、Hello World程序

在linux 下创建一个文件叫hello.py,并输入

	
print("Hello World!")

 然后执行命令:python hello.py ,输出

localhost:~ jieli$ vim hello.py
localhost:~ jieli$ python hello.py
Hello World!

 四、变量\字符编码

变量用于存储要在计算机程序中引用和操作的信息。它们还提供了一种用描述性名称标记数据的方法,以便读者和我们自己能够更清楚地理解我们的程序。将变量看作包含信息的容器是有帮助的。它们的唯一目的是在内存中标记和存储数据。然后可以在整个程序中使用这些数据。

实际上,相当于门牌号,指向内存里的存放的数据。

声明变量

#_*_coding:utf-8_*_
 
name = "Dylan"

 

变量定义的规则:

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

变量的赋值

name = "Dylan"
 
name2 = name
print(name,name2)
 
name = "AZ"
 
print("What is the value of name2 now?")

 赋值变量指示变化图解

五、用户输入

#name = raw_input("What is your name?") #only on python 2.x
name = input("What is your name?")
print("Hello " + name )

 输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:

import getpass
  
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
  
# 打印输入的内容
print(pwd)

六、 模块初识

sys

import sys
 
print(sys.argv)
 
 
#输出
$ python test.py helo world
['test.py', 'helo', 'world']  #把执行脚本时传递的参数获取到了

 os

import os
 
os.system("df -h") #调用系统命令

 结合

import os,sys
 
os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行

 自己写个模块

python tab补全模块

import sys
import readline
import rlcompleter

if sys.platform == 'darwin' and sys.version_info[0] == 2:
    readline.parse_and_bind("bind ^I rl_complete")
else:
    readline.parse_and_bind("tab: complete")  # linux and python3 on mac

for mac

 你会发现,上面自己写的tab.py模块只能在当前目录下导入,如果想在系统的何何一个地方都使用怎么办呢? 此时你就要把这个tab.py放到python全局环境变量目录里啦,基本一般都放在一个叫 Python/2.7/site-packages 目录下,这个目录在不同的OS里放的位置不一样,用 print(sys.path) 可以查看python环境变量列表。

七、数据类型初识

1、数字

int(整型)、long(长整型)、float(浮点型)、complex(复数)

2、布尔值
  真或假
  1 或 0
3、字符串
"hello world"
万恶的字符串拼接:
  python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串格式化输出
name = "Dylan"
print "i am %s " % name
  
#输出: i am Dylan

 PS: 字符串是 %s;整数 %d;浮点数%f

4、列表

创建列表:

name_list = ['dylan', 'seven', 'eric']
或
name_list = list(['dylan', 'seven', 'eric'])

 

5、元组(不可变列表)
创建元组:
ages = (11, 22, 33, 44, 55)
或
ages = tuple((11, 22, 33, 44, 55))
6、字典(无序)
创建字典:
person = {"name": "mr.wu", 'age': 18}
或
person = dict({"name": "mr.wu", 'age': 18})

常用操作:

  • 索引
  • 新增
  • 删除
  • 键、值、键值对
  • 循环
  • 长度

八、数据运算

#!/usr/bin/python
  
a = 60            # 60 = 0011 1100
b = 13            # 13 = 0000 1101
c = 0
  
c = a & b;        # 12 = 0000 1100
print "Line 1 - Value of c is ", c
  
c = a | b;        # 61 = 0011 1101
print "Line 2 - Value of c is ", c
  
c = a ^ b;        # 49 = 0011 0001 #相同为0,不同为1
print "Line 3 - Value of c is ", c
  
c = ~a;           # -61 = 1100 0011
print "Line 4 - Value of c is ", c
  
c = a << 2;       # 240 = 1111 0000
print "Line 5 - Value of c is ", c
  
c = a >> 2;       # 15 = 0000 1111
print "Line 6 - Value of c is ", c

 九、表达式if ... else

场景一、用户登陆验证

# 提示输入用户名和密码
  
# 验证用户名和密码
#     如果错误,则输出用户名或密码错误
#     如果成功,则输出 欢迎,XXX!
 
 
#!/usr/bin/env python
# -*- coding: encoding -*-
  
import getpass
  
  
name = raw_input('请输入用户名:')
pwd = getpass.getpass('请输入密码:')
  
if name == "dylan" and pwd == "cmd":
    print("欢迎,daylan!")
else:
    print("用户名和密码错误")

 

场景二、猜年龄游戏

在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
 
my_age = 28
 
user_input = int(input("input your guess num:"))
 
if user_input == my_age:
    print("Congratulations, you got it !")
elif user_input < my_age:
    print("Oops,think bigger!")
else:
    print("think smaller!")

 十、表达式for loop

循环10次

for i in range(10):
    print("loop:", i )

 continue:#跳出本次循环

for i in range(10):
    if i<5:
        continue #不往下走了,直接进入下一次loop
    print("loop:", i )

 break:#跳出整个循环

for i in range(10):
    if i>5:
        break #不往下走了,直接跳出整个loop
    print("loop:", i )

 十一、while loop

死循环,一直执行下去,不停歇。。。。

count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1

 回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。

#Author:Dylan

age_of_oldboy = 56
count=0
while count<3:
    guess_age = int(input("guess age:"))
    if guess_age == age_of_oldboy:
        print("yes, you got it. ")
        break
    elif guess_age > age_of_oldboy:
        print("think smaller...")
    else:
        print("think bigger!")
        count +=1
else:
    print("you have tried too many times...fuck off!")

 如何让用户随意猜?

#Author:Dylan
age_of_oldboy = 56
count=0
while count<3:
    guess_age = int(input("guess age:"))
    if guess_age == age_of_oldboy:
        print("yes, you got it. ")
        break
    elif guess_age > age_of_oldboy:
        print("think smaller...")
    else:
        print("think bigger!")
    count +=1
    if count == 3 :
         countine_confirm = input("do you want to keep guessing...?")
         if countine_confirm != 'n':
             count = 0

 补充:三元运算

result = 值1 if 条件 else 值2

 如果条件为真:result = 值1
如果条件为假:result = 值2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-03-16 21:26  Dylan123  阅读(225)  评论(0)    收藏  举报