资讯专栏INFORMATION COLUMN

python入门

xeblog / 1320人阅读

摘要:零预备知识字符编码计算机只能处理数字,所以为文本需要转化为数字才能被计算机处理,计算机里八个比特作为一个字节,这是数据的存储基础单位。

零、预备知识

0.1 字符编码
计算机只能处理数字,所以为文本需要转化为数字才能被计算机处理,计算机里八个比特(bit)作为一个字节(byte),这是数据的存储基础单位。计算机为了处理文本,有以下三种编码方式:

ASCII码:只有大小写英文字母,数字,一些符号共127个;1个字节,

Unicode码:所有语言都统一在一套编码里;一般2个字节,生僻字4个字节;在ASCII码前补0就行

UTF-8编码:根据不同的数字大小编码成1-6个字节;常用的英文字母1个字节,汉字3个字节,生僻的字符4-6个字节;ASCII编码实际上可以被看成是UTF-8编码的一部分

计算机内存统一使用Unicode编码,保存在硬盘(例如文件保存)里或网络传输时转换为UTF-8编码

一、简介

程序运行都是通过机器指令执行的,编程语言其实相当于机器指令和自然语言间的一个桥梁,编程语言在运行时都将会翻译为计算机可以识别的机器指令。

python是一门高级的语言,其代码行数少,因而运行时间也长。完成同样的一个功能,c语言可能需要1000行,Java100行,python20行。

python一般用于实现应用程序,如算法,网站后台,在线游戏后台,c语言一般用于底层的接近硬件的开发如操作系统,java一般用于网站开发和Android,swift/objective-c主要用于iPhone开发

解释型语言:python是解释型语言,在运行时逐行翻译为机器码;c语言则是编译型语言,它在运行前编译为机器码。

动态数据类型:python数据类型为动态,不同类型变量可以相互赋值,而类似于java,c是静态类型,声明变量时需声明数据类型,数据类型不同相互赋值则会报错

1.1 优点:

代码量少

有丰富的基本库和第三方库,基本代码库包含网络,GUI,数据库,文件,文本等方面

1.2 缺点:

程序运行时间长

代码不能加密。分享代码只能通过源代码,不像c语言可以分享编译后的机器码

1.3 适用方面:

日常小工具

网络应用,如网络后台,在线游戏

封装其他语言完成的程序

二、安装python

python是跨平台的,在windows上编写的代码直接搬到mac/linux上也可以运行

安装python的时候你将会得到一个python解释器,包括一个pyhton命令行交互运行环境和一个集成开发环境

2.1 安装步骤:

下载安装:从Python官网下载pyhton的exe安装文件,一路下一步安装后即可(注意将python.exe路径加入path环境变量里,不然Windows可能没办法找到)

进入命令行交互环境:在windows系统下打开cmd命令行提示符窗口,提示符类似c:>

进入python交互环境:在命令行提示符窗口里输入python,出现提示符>>>,这就表明已经进入python交互运行环境,然后就可以输入python代码,回车则执行

退出python交互环境:输入exit()并回车,则可以退出

2.2 python解释器:

我们编写python代码时会得到一个后缀为.py的文本,我们需要一个Python解释器来解释,Python解释器包含很多版本

CPython: python的官方解释器,用c语言开发出来的,在命令行交互窗口里输入python则启动CPython解释器,提示符是>>>

IPython: 基于CPython的解释器,在CPython的解释方式上有所增强,执行程序得到结果和CPython一样,提示符是In[符号]

pypy: 采用JIT技术,对Python代码进行动态编译(注意不是解释),执行程序结果可能和CPython不同

Jython:运行在Java平台上的解释器,可以把Python代码编译成为Java字节码

ItonPython:运行在微软.Net平台上的解释器,可以直接把Python代码编译成.Net的字节码

三、第一个python程序

命令行模式和python交互模式:

命令行模式:cd 路径命令行将路径转到需要执行的Python文件的目录下,然后用命令行python xx.py执行文件,相当于启动了Python解释器,一次性执行Python代码

Python交互模式: 直接输入Python代码则可以输出代码执行结果,相对于启动Python解释器,输入一行代码就执行一行,一般用作调试Python代码,具体例如下

>>>100+200
300

>>>print("hello world!")
hello world!

在打代码时可以一边在文本编辑器里编辑,一边粘贴到Python交互环境里进行调试。

四、Python基础

4.1 输出print()

输出单个字符串:print("hello world!")

输出多个字符串:print("hello,world")多个字符串用逗号隔开,输出时逗号变成空格

输出运算式:print(200+100)

输出字符串和运算式:print("100+200=",100+200)

4.2 输入input()

输入字符串存在变量里:s=input(),此时name是str类型,要变成int类型需要函数int(),news=int(s)

输入字符串前显示提示信息:name=input("please enter your name")

4.3 基础

注释:#注释

代码块:Python代码每一行是一个语句(结尾不用;),语句以冒号:结尾时缩进的代码为代码块

缩进: 缩进为四个空格

Python严格大小写

#输出最大值
a=100
b=200
if(a>b):
    print(a)
else:
    print(b)

4.4 数据类型

整数:Python可以处理任意大小的整数,包括负整数,八进制0开头,十六进制0X开头,如:1,3,04,0xff00,-394,整数运算永远是精确的,大小没有限制
range(n)函数,生成一个从0到n-1的整数序列

>>>list(range(5))
[0, 1, 2, 3, 4]

浮点数:浮点数就是小数,很大的小数用科学计数法,如:2.23,-3.22,1.23e8,浮点运算可能因为四舍五入产生误差,大小没有限制,但是超过某个范围则为inf(无限大)

字符串:用" "或" "包裹起来,如果需要字符" "则用" "包裹,如果同时需要" 和"则需要转义

"        "
"       "
        

        换行
	        制表符
r""       默认不转义,转移符将按原字符表示
""" """   输入的换行可以保留

字符串常用函数:ord("字符")获得字符编码的十进制表示;chr("编码")获得编码对应函数;len("字符串")计算字符串的字符数,len(b"byte")计算byte字节数

>>>ord("A")
65
>>> ord("中")
20013
>>> chr(66)
"B"
>>> chr(25991)
"文"
#知道字符十六进制表示可直接用"xxxxxx"写str
>>> "u4e2du6587"
"中文"
>>> len("中文")
2
>>> len("中文".encode("utf-8"))
6
b = a.replace("a", "A")    //b是将a中a替换为A的字符串Abc,a仍旧是原字符串abc
    

字符串格式化:,可以用占位符或format()函数进行格式化,%d整数(%2d表示长度为2,%02d表示长度为2,不足补零),%f浮点数(%.2f表示保留两位小数),%s字符串(可以将任何类型数据转换为字符串),%x十六进制整,format用{0}{1}占位

>>>"Hi, %s, you have $%d." % ("Michael", 1000000)
"Hi, Michael, you have $1000000."
>>> "Hello, {0}, 成绩提升了 {1:.1f}%".format("小明", 17.125)
"Hello, 小明, 成绩提升了 17.1%"
    

字符串编码:
python中:str类型;Unicode编码;占多个字节;‘’;用encode(编码方式名)编码
磁盘和网络中:byte类型;ASCII编码和utf-8编码;占一个字节;b‘’;用decode(编码方式名)解码

    #编码
    >>>"ABC".encode("ascii")
    b"ABC"
    >>> "中文".encode("utf-8")
    b"xe4xb8xadxe6x96x87"
    #解码
    >>> b"ABC".decode("ascii")
    "ABC"
    >>> b"xe4xb8xadxe6x96x87".decode("utf-8")
    "中文"

布尔值:FlaseTrue,运算符是and or not
非零数值,非空字符串,非空list都是true

空置:None

字典
查找插入速度快,不会随元素增加变化,需要大量内存,内存浪费多
dict类型:使用健-值(key-value)存储,可以通过key采用hash算法直接计算出value的存放位置,所有key只能是不可变数据,例如str,int,不能是list

声明:`d = {"Michael": 95, "Bob": 75, "Tracy": 85}`
取值:d["key"]
判断key是否存在:`"key" in data`或者data.get("key")
删除:`data.pop("key")`
赋值:`data["key"]=newdata`

set类型:一组无序的不重复的key集合,没有vaule,需要一个list作为输入集合,key也只能是不可变对象

声明:s=set([1,2,3,3]) //重复元素自动变为一个,s为{1,2,3}
添加:s.add(4)
删除:s.remove(4)
交集并集:s1&s2 s1|s2  //和数学的交集并集一样

列表
查找插入速度随元素增加变慢,需要少量内存,内存浪费少
list类型:相当于数组,按顺序查找
声明:classmates = ["Michael", "Bob", "Tracy"],其中元素类型可不同,用[]声明
索引:从0到len(classmates-1)或-1,同理倒数第二个索引为-2以此类推
函数:append(),pop(),insert().len(),list()

classmates.append("Adam")          //追加
classmates.insert(索引位置, "Jack") //插入指定位置
classmates.pop()                   //删除末尾
classmates.pop(索引位置)            //删除指定位置
classmates[1] = "Sarah"            //指定位置赋值
len(s)                             //list元素个数
classmate.sort()                   //根据内容字典排序
list()                             //强制转换为list  

tuple类型:和list相似,但一旦初始化其元素就不能修改,元素自身指向如list可修改,获取元素方式和list一样
声明:classmates = ("Michael", "Bob", "Tracy"),只有一个元素需要加,不然不会认作tuple类型 t = (1,),用()声明

自定义

4.5 变量

变量名:数字,大小字母,_,不能数字开头

同一变量可以反复赋值,无论赋值类型

除法/得到数据均为浮点数,//得到数据均去掉小数部分,为整数,%取两个整数的余数

4.6 常量

python没有固定常量,默认用大写的变量名表示常量

五、语句

5.1条件语句
注意if,else if,elif后面是:靠缩进区别代码块,逻辑运算符用and,or,not

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

5.2 循环语句
for x in data:把list和tuple类型的data中的每个元素依次代入x

names = ["Michael", "Bob", "Tracy"]
for name in names:
    print(name)
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    print(x)

while:条件满足,就不断循环,条件不满足时退出循环

while n > 0:
    sum = sum + n

break:可以在循环过程中直接退出循环
continue:直接开始下一轮循环

六、函数

函数名是指向一个函数对象的引用,把函数名赋给一个变量,相当于给这个函数起了一个“别名”
6.1 调用函数
调用函数需要函数的名称和参数,可以参考python官网:http://docs.python.org/3/libr...,如果输入的参数数目或类型不对会报TypeError的错

TypeError: abs() takes exactly one argument (2 given)
TypeError: bad operand type for abs(): "str"

6.2 数据类型转换
python常用函数还包括数据类型转换函数,如int()函数可以把其他数据类型转换为整数
6.3 函数定义
函数定义由def,函数名(参数),return表示,如果没有return语句,函数执行完毕后返回None。return None可以简写为return

def 函数名(参数):
    if x >= 0:
        return x
    else:
        return -x

在python交互环境里定义,会出现...,定义完毕后输入两次回车出现提示符,即可执行
如果函数定义在文件new.py里,则可以用命令行python new import 函数名导入函数,然后再执行
空函数:用pass占位,也可用于if代码块里

def nop():
    pass

参数检查:python可以检查内置函数参数个数和类型,自定义函数只能检查个数,类型需要用isinstace()自定义检查

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError("bad operand type")

返回多个参数:函数返回多个参数return a,b,实际是返回一个tuple类型数据,如果函数赋给多个变量c,d = new(1,2),则是将函数返回的tuple类型数据依次赋给c,d;如果函数赋给一个变量e = new(1,2),则e即为这个tuple类型变量

def new(a,b):
a=0
b=1
return a,b
>>>c,d = new(1,2)     //c=1,d=2
>>>e = new(1,2)       //e[0]=1,e[1]=2

6.4 函数参数
默认参数:power(x,n=2)默认参数n取值为2,当调用函数书写为power(1)时,相当于调用power(5,2)。注:必选参数在前,可选参数在后,默认值不是最后一个需指定参数名

def enroll(name, gender, age=6, city="Beijing"):
    ...
enroll("Sarah", "F")
enroll("Bob", "M", 7)
enroll("Adam", "M", city="Tianjin")

注:默认参数最好指向不变对象,如str,int,None
可变参数:传入参数个数可变,参数用*numbers表示,此刻参数numbers接收到一个tuple类型数据

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc(1,2,3,4)
#若已有一个tuple或list,则可以用`clac(*nums)`调用
nums = [1,2,3]
clac(*nums)

关键字参数:传入任意个参数person("Bob", 35, city="Beijing",job="Engineer"),这些关键字自动组装为一个dict,person(name,age,**kw),此刻dict为{"gender": "M", "job": "Engineer"}

def person(name, age, **kw):
    print("name:", name, "age:", age, "other:", kw)
person("Adam", 45, gender="M", job="Engineer")
#若已有一个dict,可用person(**extra)调用
extra = {"city": "Beijing", "job": "Engineer"}
person("Jack", 24, **extra)

6.5 递归函数

def fact(n):
    if n==1:
        return 1
    else:
        return n*fact(n-1)

栈溢出:计算机里函数调用是通过栈完成,调用一个函数栈加一个栈帧,调用完成减一个栈帧,如果递归太多次会导致栈溢出
尾递归:为了防止栈溢出,就可以采取尾递归方式,即每次函数返回时调用函数自身,这样无论递归多少次都只占用一个栈帧

def fact2(n):
    return fact2_iter(n,1)
def fact2_iter(n,product):
    if n==1:
        return product
    else:
        return fact2_iter(n-1,product*n)

理论上只要解释优化后尾递归不会出现栈溢出,但是目前大多数解释器包括python解释器并没有进行解释器优化。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42549.html

相关文章

  • Python入门资料大全(更新ing)

    摘要:在线挑战,还没用过,貌似现在对英文资料心里还有种抵触,必须克服实验楼研发工程师包含了等学习课程。书的作者就是开发了用于数据分析的著名开源库的作者英文资料,对数据分析中要用到的一些库,等等做了简要介绍。形式的资料,示例代码都很全。 showImg(https://segmentfault.com/img/remote/1460000004852849); 一、说明 面对网络上纷繁复杂的资...

    wuaiqiu 评论0 收藏0
  • Python猫荐书系列之七:Python入门书籍有哪些?

    摘要:正好,最近又有几位不同身份的初学者来咨询,要我推荐几本入门书籍,而我们荐书系列已经停更了两个多月,所以,本期荐书就来推荐一些入门书籍吧。为了准备这期荐书,我专门搜集了本入门书籍,现在全部加入到了一份豆瓣豆列里,方便大家查看。 showImg(https://segmentfault.com/img/remote/1460000019299066?w=4790&h=3193); 本文原创...

    Joyven 评论0 收藏0
  • 给伸手党的福利:Python 新手入门引导

    摘要:如果你仍然无法抉择,那请选择,毕竟这是未来的趋势,参考知乎回答还是编辑器该如何选我推荐社区版,配置简单功能强大使用起来省时省心,对初学者友好。 这是一篇 Python 入门指南,针对那些没有任何编程经验,从零开始学习 Python 的同学。不管你学习的出发点是兴趣驱动、拓展思维,还是工作需要、想要转行,都可以此文作为一个参考。 在这个信息爆炸的时代,以 Python入门 为关键字搜索出...

    用户84 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<