python快速学习系列(1):初识Linux和python

本博文介绍了Linux和python的基础知识,以python为主。概括性的介绍了python的基本语法。
废话不多说,干活奉上


Lecture 1:初识Linux和python

1.shell,bash,Terminal(终端仿真程序),Console
shell是一个程序,接受从键盘输入的命令,然后把命令行传递给OS。几乎所有的Linux发行版
都提供一个名为bash的来自GNU的shell程序。(常用的shell程序是bash)
Linux服务器相连接的外设(键盘,显示器)称之为Console
通过网络和shell程序在另一台设备上仿真出了一个console叫terminal

2.$,#
$:叫做shell提示符,无论何时shell准备好了去接受输入时,它就会出现
#:说明这个终端会话就有超级用户权限,也就是我们是以root登录或者我们选择的终端仿真器提供超级用户权限

3.Linux目录结构:
/:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者
/bin:binary的缩写,可执行二进制文件目录,系统所需要的那些命令位于此目录
/boot:Linux的内核以及引导系统程序所需要的文件目录
/dev:device的缩写,包含了Linux系统中使用的素有外部设备
/etc:最重要的目录之一,系统管理中的各种配置文件均在此
/lib:存放系统级动态链接共享库,所有用户共享
/mnt:挂在存储设备目录,如果有外置存储设备,如大型硬盘,挂在之后会在次目录找到
/media:有些发行版用此目录挂在USB接口的移动硬盘等
/opt:主要存放可选应用程序
/usr:占用空间最大的目录。用户的应用程序多存放于此
/usr/local:主要存放手动安装的软件
/usr/share:系统公用的文件存放地,如帮助文档,字体文件等
/home:如果建立一个用户sigai,那么/home下就会有一个/home/sigai目录

4.Linux文件读写权限:
使用命令ls -al可以打印出当前目录下所有文件的读写权限,如:
drwxr-xr-x 1 root root 19 May 26 01:45 var
首先,看第一列drwxr-xr-x:d表示文件类型,rwx表示root权限,r-x表示用户组权限,r-x表示用户组权限
其中,r代表可读,w代表可写,x代表可执行
文件类型有:普通文件-,目录文件d,链接文件l,设备文件bc,socket文件s,管道p

5.python解释器
1)python程序是如何执行的?
-计算机执行的是机器代码,人类写出来的代码需要被翻译成机器代码
-翻译的形式一般有三种:编译vs解释vs先编译后解释
-python是一门解释型语言:先翻译,再执行
-python的翻译基于虚拟机:先编译,后解释(PyCodeObject与pyc文件)

2)增强版解释器-IPython
代码补全:tab
查看信息:?
与命令行交互:!
魔法命令:%magic
类MATLAB的科学计算模式:-pylab

3)更强的工具-Jupyter NoteBook
可以轻松的将一系列的运行结果保存成文档:分享和保存
基于web可以使用远程的后端计算引擎:笔记本电脑+服务器计算

6.输入输出
1)输出print

print('100 + 200=',100+200)#注意,输出时一个逗号相当于一个空格

2)输入input

name = input()
name = input('please input your name')

7.数据类型
-整数:与数学上的写法完全一样,可处理任意大小的整数
常量通常用大写字母表示
-浮点数:由于内部存储方式不同,整数计算永远精确,浮点数计算则不是
-字符串:单引号或双引号括起来的任意文本
-布尔值:True或者False;可记性and or not 运算
-空值:None,只需记住None不等于0即可

8.基本运算:
加减乘取余不说了,和其他语言一样;
除:
3/2=1.5,和数学表达式保持一致
3//2=1,向下取整,-5//3=-2,3.0//2.0=1.0(注意数据类型)

9.List:[]
可变(元素可以增删改查)
有序(可以用下标访问)
集合(各种元素可以不同,互相独立)

10.Tuple():初始化之后不可修改的List就是tuple
声明一个变量的tuple:T=(item,)#必须有逗号,否则声明的不是tuple而是变量
ps:因为()的作用有两个,一是声明tuple,二是运算时的优先级

11.Dic{key:value}:python中可变的key-value形式的数据结构,查找速度很快
-用时间换空间的策略,消耗内存大
-内部存放顺序与key的顺序无关(和hash类似)
-key必须是不可变对象
D = {‘a1’:100, ‘a2’:20, ‘a3’:88}
1)判断key是否存在于字典中:‘a1’ in D
2)取出关键字key的集合:D.keys()
返回:dict_keys([‘a1’,‘a2’,‘a3’])
3)D.get()和下标访问的区别:
D.get(‘a4’):a4不存在,取出的是None,不会报错
D[‘a4’]:a4不存在,不能取出,会报语法错误

12.set{}:Dict中Key的集合,天然的去重好方法
由于key必须hashable(不可以改变的元素称之为可哈希的,如List是unhashable),也就是说key是唯一的,因此set中无重复的key
add,remove

13.raw string:在字符串前面加上r,表示所有的\的转义作用都消失
如:

print(r'123\n456')#结果是123\n456

14.字符编码
1)ASCII,Unicode,UTF-8
-ASCII码节省空间,但是容易出现乱码
-Unicode统一了各种语言的编码,但可能存在大量空间冗余
-UTF-8:可变长的Unicode编码
-ASCII可被认为是UTF-8的一部分

2)字符编码的常见工作模式:
内存-Unicode,存储-UTF-8,传输-UTF-8
python3内存中默认的字符串是str类型,以Unicode编码,存储或传输时用以字节为单位的bytes类型

3)字符串的编解码(decode & encode)
-纯英文可用ASCII将str编码为bytes
-含有中文则可用UTF-8将str编码为bytes
-从网络或磁盘上读取的字节流为bytes

15.变量:指向一个对象,而对象有可变与不可变之分
可用id(变量名)查看变量的地址
a = ‘wxd’#地址1
a = ‘WXD’#地址2
a = [‘W’,‘X’]#地址3
a.append(‘D’)#地址4
可以采用print(id(a)) 的方式来查看a的地址
可以看到:
地址1!=地址2; 地址3==地址4

当赋值一个不可变的元素时(如常量),指向固定的内存单元,所以地址1!=地址2
当赋值一个可变的元素时(如List),指向初始地址,类似指针

16.引用与拷贝(一定要好好好区分,非常重要)
可变类型对象的赋值,传递的是引用,类似于C语言中的指针
a = [1,2,3]
b = a#引用
a.append(100)#a=[1,2,3,100],同时b也是[1,2,3,100]
如果不想传递引用,需要用拷贝的方式
a = [1,2,3]
b = a[:]#拷贝
a.append(100)#a=[1,2,3,100],但是b仍然是[1,2,3]

17.逻辑判断
·==, !=, >, <, >=, <=:计算用数值,结果用布尔
·not:计算用布尔,结果用布尔
·is:不计算,只判断(只要在内存上不一样,就是FALSE)
·链式判断大小关系:结果与数学上保持一致
·and:从左向右找0或者FALSE,找到则立即返回,未找到则返回最后一个(返回值不一定是True,FALSE)
·or:从左向右找非0数字或者True,找到则立即返回,未找到则返回最后一个(返回值不一定是True,FALSE)
例如:
1 and 2 and 3 --> 3
1 and True and 3 --> 3
1 and False and 3 --> False
1 and 0 and 3 --> 0

3 or 2 or 1 --> 3
0 or 2 or 1 -->2
False or 2 or 0 --> 2
0 or False or -3 --> -3

18.传入任意个数的参数,用*符号

def sum(*numbers):#自动把多个参数转化成一个list
    s = 0
    for x in numbers:
        s += x
    return s
if __name__ == '__main__':
    test_func = sum #给sum起了一个别名
    assert test_func() == 0
    assert test_func(1,3,5) == 9
#assert是一个关键字,用于判断后面的表达式是否正确,如果正确则继续执行,否则抛出异常

19.面向对象:
1)初始化函数都使用__init__(self,若干个参数)
其中,私有变量用__变量名来表示,如self.__name表示是私有变量

class Student(object):
    def __init__(self,name,score=-1):
        self.__name = name
        self.__score =score
    def name(self):
        return self.__name
    def say_hi(self):
        if self.__score < 0:
            print('{}:Hi,my name is {},I am a new Student',format(self.__name,self.__name))
        else:
            print("{}:Hi,my name is {}, My score is {}".format(self.__name,self.__name,self.__score))
    def get_score(self,teacher,score):
        self.score = score
        print("{}:teacher {} just gave me a {}".format(self.__name,teacher,score))

20.python代码的组织——模块
·包->模块->类或功能函数
·每个包里面都含有一个__init__.py文件,而且必须存在,用以区分普通目录还是包
·创建包或者模块的时候,不可与系统自带的包或者模块重名

21.python解释器的默认搜索路径
print(’\n’.join(sys.path))
会打印出路径,python从这些路径中自上而下搜索,如果有就能import
如果自己写了一个模块,而这个模块在其他路径中,可以通过以下方法将路径添加进去,从而实现导入
sys.path.append(’/home/sigai/workspace’)#引号里面是当前路径
但是这种方式有不足之处:当你退出解释器之后,会恢复原样

猜你喜欢

转载自blog.csdn.net/shanlepu6038/article/details/84670631