廖雪峰--python教程:笔记一

Python 简介

Python是一个解释型的语言,也就是说:解释器给CPU解释一行,执行一行,速度相比较C是慢了许多;但,Python内置了大量的库函数,还有大量的第三方库,都可以为你编写程序效力,所以仅需要简短的代码,就能干复杂的事情,这也是为什么流传的“人生苦短,我用Python”的原因。

Python现在用两个版本2.x和3.x,这两个版本是不兼容的,本系列笔记是根据Python 3.x版本学习的,但当我在学习Python的过程中,如遇到python 2.x 和 3.x ,使用不同之处的地方,我会记录下来,以便日后查找。Python既然是一个解释型的语言,那么在编写完源码后(以.py为后缀名的文件)需要通过一个解释器来逐行的将源码解释成机器语言,让计算机执行。在安装Python的时候,就自带了官方的解释器CPython,这是一个以提供一个命令行形式的解释器。当然,你也可以不适用官方的,如比较流行的IPython,它是基于CPython之上的,可交互的解释器。

简短的Python小程序

那么,我们来开始一个简短的python小程序吧!在写程序之前,我们要了解Python是如何运行程序的。Python有两种方式执行程序,第一是在python的交互式命令行里,输入一行后,会立马执行一行,这个可以方便我们用来验证某一段Python代码的正确性是非常有帮助的;第二种是在文本编辑器里输入python源码,然后保存为x.py文件,在这个文件的当前路径下,通过 python x.py即可执行文件里的代码。需要注意的是,不要使用Windows自带的文本编辑器和word这样编辑器来写代码,尽量不要复制粘贴别人的python代码,因为会很容易出现缩进的问题。

让我们和世界打个招呼吧:
print(“Hello,world”,’Hi,Python’)
输出: Hello,world空格Hi,Python
print()函数是python内置的函数,可以将字符串、变量、表达式等输出到屏幕中去。这里我们看到,字符串用双引号和单引号都是可以的(当然,混用是不可以的),这里的“,”逗号,会被输出为空格。
那有了简单的输出了,如何从键盘输入呢?Python提供了一个内置函数input():
name = input(‘please enter your name:’)
在屏幕上会输出please enter your name:并且等待的你的输入,若你输入:
This is Cool!
则,这个字符串“This isCool!”就会赋值给了变量name。注意,你的输入都被作为字符串来处理。

Python 基本语法

OK,通过上面的简短不精确的描述,你可能对Python有了一点点的了解,那么现在让我们来开始学习Python的基本语法吧!

'''
先来一个热身吧!你做好准备了?
'''
raeay = 666
ready = input("Are you ready?") #输入yes or no, 大小写都可以
if ready.lower() == 'yes':
  print('Welcome\nThanks')
else if ready.lower() == 'no':
  print('''Come on
  Belive in Yourself!''')
else:
  print('Don\'t worry,You Can')
  print(r'Try again,\nit is easy for you')

‘’‘…”’ : 这是一个可以写多行的注释

# 是单行注释

缩进:

缩进是Python的一大特色,是很具有标志性的。当语句遇到:时接下来的语句视为代码块,也就是相当于Java 函数中的{语句块}。这带来的好处是,看起来很清爽(易于理解代码),和强制你将一个很复杂的函数,拆分成多个简单的函数。一般大家遵守的是一个tab键的空格(4个),所以你也不要列外。缺点是,当你copy别人的代码时,要仔细地检查缩进的问题啦!

ready变量指向的是你输入的字符,python是一个动态的语言(与之对应的是静态的语言C,Java),那怎么定义动态和静态的呢?Python中的变量是可以任意转换数据类型的,就如现在这个ready变量,在最开始我赋值给它一个整数型数值,那么此时ready变量是int类型(type(ready)来查看),但是,当你输入字符的时候,ready就是str字符型的啦。Python变量的类型可以随意变换,而在C语言中,在使用变量前,需要先声明(int ready,声明后该变量的数据类型就不会改变啦)才能使用,所以说,Python是一个动态的语言。ready变量和数据(666,和你的输入)是什么关系呢?在Python中,数据皆是对象,即如:ready = 666,Python解释器会告诉计算机先在内存中创建一个值为666整数,然后再创建一个名为ready变量,最后将这个ready变量指向整数666。程序执行到下一条,此时你输入yes,Python解释器会在内存中创建一个yes的字符串,并且将变量ready指向字符串yes。所以,如果遇到这样的代码:a=2; b=a; a=3; 你应该能知道,b指向2,a指向3。

lower()是Python内置函数,’Yes‘.lower() 为:yes,聪明的你,此时猜想 ‘yes’.upper()会是什么呢?在这我就不讲啦,你知道答案的。

\n: 是转义字符,换行的意思;那你要是想多换几行,不想每一次换行都码\n,怎么做呢? — 通过在print()函数中,输入
”’
感觉写的可以啦,换到下一行
在文本编译器里直接换行就行啦”’

\’: 如果想在单引号的里输出’,就使用这种简单的转义字符\,那要是不想用转义字符,可以使用r’你的输入内容’,这样可以完整的显示 你的输入内容(注意,这里你的输入内容是指,没有单引号),print(r’Try again,\nit is easy for you’):输出: Try again,\nit is easy for you

上面介绍到,Python是动态语言,因为变量可以改变其数据类型,那么我们就简单的说说Python有哪几种数据类型。

简单来说,Python有这几种数据类型,整数型,浮点型,字符串型,布尔型,列表型,字典型,你自己创建的类型。整数型和浮点型数据没有大小的限制,太大(返回inf)

对于整数(int)和浮点数(float),先来简单的聊聊他们的除法
/: a/b 无论a,b为整数还是浮点,结果都是浮点
// : 绝对除,a//b, 若a或b有一个为float,结果都为float类型,但值为取整,
%: 取余

对于布尔类型:
True 和 False , 注意大小写,如 5 > 3 返回 True
三种运算: and 、or、 not

在Python里还有一个特殊的值,空值: None

字符集编码问题

字符串是一种数据类型,但是字符串比较特殊的还有编码问题:

Unicode、utf-8、gbk:接下来聊聊令人头大的编码问题:

我就简单的理一理:
我们在用文本编辑器写Python代码时,需要注意两个地方,第一个:# -*- coding: utf-8 -*-
将这个声明放在文件的最上方,它是用来告诉Python编辑器,这个文件的源码的字符集编码是utf-8;第二个:将写好的文件保存的格式设置为utf-8。这样执行起来没有任何问题啦!

读取文件X到内存时,如果文件X是用utf-8的字符集编码的话,数字和英文字符是一个字节,中文字符一般是三个字节,每个字节是(8bit),也就是说,文件X在硬盘上保存的是这些字符对应的很多个字节。那当读入到内存时,全部都转化为Unicode字符集编码。当用Python3 open()函数默认设置,读取文件X时,open()函数会调用当前的系统的字符集编码(win下默认是gbk)的方式去读取文件X到内存中去,如果打印此内容,就会出错! ‘gbk’ codec can’t decode byte 0…
所以,当我们使用open()函数去读取文件时,要这样设置f=open(filename,encoding=’utf-8′)这样就会按照utf-8的字符集编码去读取文件啦,当我们在内存的X文件写入到硬盘时,我们可以指定其编码字符如 b’这里是字节,内存里的东西’.decode(‘utf-8′,errors=’ignore’),因为在读取X文件时,X文件可能会出现非法字符,所以在写入的时候,加上errors=’ignore’

格式化输出:
print(‘%d,%f,%s’ % (23,3.14,’Wa’))
在%(可以为变量,表达式,常量,和字符串),但是,一定要一一对准位置

list 列表:
这个内容可丰富啦,有比较好用的切片,还有列表生成式,今天就简单谈谈一些基本的:
a = [1,2.0,’fafa’,[1,2,’where’]]
列表的元素不限数据类型,a是一个列表从索引0开始,即a[1] 输出:2.0, a[1:3] 输出:[2.0,’fafa’], a[-1]输出:[1,2,’where’]
pop()函数删除list末尾元素,a.pop(1),则删除列表a第二个元素
insert(索引,内容):插入函数a.insert(0,90)在列表a第一个位置插入了90
append(),向列表末尾追加一个元素,该元素可以为列表,字符串等
extend(),也是向列表a末尾最加一个元素,若该元素为列表b,则将该列表b的元素取出加入到列表a中。如
a = [1, 2.0, ‘fafa’, [1, 2, ‘where’]]
a.append([1,2,3]):[1, 2.0, ‘fafa’, [1, 2, ‘where’], [1, 2, 3]]
a.extend([1,2,3]): [1, 2.0, ‘fafa’, [1, 2, ‘where’], 1, 2]
len(a): a列表的元素个数,len(‘strs’):’strs’字符串中的字符个数

truple元组:
truple元组一旦初始化就不可以改变啦:t = (1,2.0,’fafa’,[1,2,’where’])
但是,当t[3][0] = ‘A’; t[3][1] = ‘B’;
则 t: (1, 2.0, ‘fafa’, [‘A’, ‘B’, ‘where’]),这是为什么呢?
实际上是,不变指的是 指向 不变,也就是,t中第一个元素指向是 1 ,t 中第4个元素指向的是一个列表,但是列表中的第一指向,可以改变呀
所以,当要想创建一个内容不变的truple元组时,那就得保证truple的每一个元素本身也不能变

 

    原文作者:_DoubleLin
    原文地址: https://www.cnblogs.com/double-lin/p/9738078.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞