python 基础(一)

Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。

那Python适合开发哪些类型的应用呢?

  • 首选是网络应用,包括网站、后台服务等等;
  • 其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;
  • 另外就是把其他语言开发的程序再包装起来,方便使用。

缺点是运行有点慢、代码不能加密;

1.基本使用

在Python交互模式下输入exit()并回车,就退出了Python交互模式,并回到命令行模式:

Python 3.6.3 (v3.6.3:2c5fed86e0, Oct  3 2017, 00:32:08) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit http://www.python.org/download/mac/tcltk/ for current information.
print "hello"
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello")?
>>> print ("hello") //打印
hello
>>> 100 + 200 // 输出结果
300
>>> exit()  // 退出python交互模式
>>> 

用户输入使用input():

print('测试输入')
name = input()
print("您输入的是:" + name)
#执行脚本
python testPython.py 
hello world
600
测试输入
hello
您输入的是:hello

2.基本语法

# print absolute value of an integer:
a = 100
if a >= 0:
    print(a)
else:
    print(-a)

Python使用缩进来组织代码块,请务必遵守约定俗成的习惯,坚持使用4个空格的缩进。以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。Python程序是大小写敏感的,如果写错了大小写,程序会报错。

3.数据类型和变量

  • 整数:Python可以处理任意大小的整数,当然包括负整数,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。
  • 浮点数:整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。
  • 字符串:字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz";转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\表示的字符就是\
  • 布尔值:true false
  • 空值:空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
  • 常量:所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
PI = 3.14159265359
整数的除法为什么也是精确的。在Python中,有两种除法,
一种除法是/:
>>> 10 / 3
3.3333333333333335

/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
>>> 9 / 3
3.0

还有一种除法是//,称为地板除,两个整数的除法仍然是整数:
>>> 10 // 3
3
取余运算 %
>>> 10 % 3
1
  • list:
    Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。相当于数组;
>>> classmates = ['a', 'b', 'c']
>>> classmates
['a', 'b', 'c']
>>> len(classmates)
3
>>> classmates[2]
'c'
>>> classmates[3]
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    classmates[3]
IndexError: list index out of range
>>> classmates.append('d')
>>> classmates
['a', 'b', 'c', 'd']
>>> classmates.insert(4, 'E')
>>> classmates
['a', 'b', 'c', 'd', 'E']
>>> classmates.pop
<built-in method pop of list object at 0x101bb60c8>
>>> classmates.pop()
'E'
>>> classp = ['f','g']
>>> classmates.insert(4, classp)
>>> classmates
['a', 'b', 'c', 'd', ['f', 'g']]
  • tuple:另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,这里的不能修改是指不能修改里面对象的指向,比如 定义classmates = (a, b, [c, d]);不能修改是指a的指向不能指向b;里面的list是可变对象里面的值可变,但是classmates指向的list不变;

条件语句和循环语句:break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。

print('测试条件表达式:')

age = input('输入你的年龄:')

if int(age) >= 26:
   print('你已经是大龄剩女了!')
else:
   print('你好嫩嫩的!')

print('测试循环表达式:')

sum = 0
for x in range(1,100):
   sum = sum + x

print(sum)
  • dict字典 或者是map
    Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
  • set
    set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

函数文档

数据转换:
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False
  • 高级特性:在Python中,代码不是越多越好,而是越少越好。代码不是越复杂越好,而是越简单越好。
1.经常取指定索引范围的操作,用循环十分繁琐,因此,Python
提供了切片(Slice)操作符,能大大简化这种操作。
>>> classmates
['a', 'b', 'c', 'd', ['f', 'g']]
>>> classmates[0:4] //0-4位置范围数据
['a', 'b', 'c', 'd']

tuple也是一种list,唯一区别是tuple不可变。因此,tuple
也可以用切片操作,只是操作的结果仍是tuple:
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

2.运用列表生成式,可以快速生成list,可以通过一个list推导
出另一个list,而代码却十分简洁。
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

generator生成器:第一种方法很简单,只要把一个
列表生成式的[]改成(),就创建了一个generator:
通过next()函数获得generator的下一个返回值:
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
如果一个函数定义中包含yield关键字,那么这个函数就不再是
一个普通函数,而是一个generator:

classmates[0:4]表示,从索引0开始取,直到索引4为止,但不包括索引4。即索引0,1,2,3,正好是4个元素。

凡是可作用于for循环的对象都是Iterable类型;
凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

面向对象编程

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向对象的设计思想是抽象出Class,根据Class创建Instance。
数据封装、继承和多态是面向对象的三大特点
面向对象的抽象程度又比函数要高,因为一个Class既包含数据,又包含操作数据的方法。

比如定义一个学生对象:需要打印学生信息

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print('%s: %s' % (self.name, self.score))

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数;可以把属性的名称前加上两个下划线,在Python中,实例的变量名如果以开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问,所以,我们把Student类改一改:

class Student(object):

    def __init__(self, name, score):
        self.__name = name //private 私有属性
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))

-1.使用__slots__:(__slots__)定义的属性仅对当前类实例起作用,
对继承的子类是不起作用的
-2.使用@property:
-3.python支持多重继承,java只是单一继承
-4.使用枚举enum
from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

1.继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
2.动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。

常用内建模块

  • datetime:datetime是Python处理日期和时间的标准库。
# 使用内建模块
now = datetime.now()
print(now)
dt = datetime(2018, 6, 3, 10, 35).timestamp()
print(dt)
要把timestamp转换为datetime,使用datetime提供的fromtimestamp()方法
  • collections是Python内建的一个集合模块,提供了许多有用的集合类。
  • urllib提供了一系列用于操作URL的功能。
    urllib/urllib2/urllib3之间的区别
    urllib and urllib2 区别:urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能;
urllib 有urlencode,urllib2 没有;
urllib2.urlopen可以接受一个Request对象或者url,
urllib.urlopen只接收一个url

网络编程基础

IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地址如192.168.0.1实际上是把32位整数按8位分组后的数字表示,目的是便于阅读。

IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版,以字符串表示类似于2001:0db8:85a3:0042:1000:8a2e:0370:7334。

TCP协议则是建立在IP协议之上的。TCP协议负责在两台计算机之间建立可靠连接,保证数据包按顺序到达。TCP协议会通过握手建立连接,然后,对每个IP包编号,确保对方按顺序收到,如果包丢掉了,就自动重发。

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

直接运行py文件

在Mac或者Linux上操作,window不行

  • 1.在.py文件的第一行加上一个特殊的注释:
  • 2.然后,通过命令给hello.py以执行权限:
1.
#!/usr/bin/env python3

print('hello world')
print(100+200+300)

2.$ chmod a+x hello.py
3.把文件拖入命令行执行

Mac 常用命令

  • 1.ls:查看文件和文件夹,但隐藏的文件就无法查看,使用ls -a即可
  • 2.mkdir :创建目录,mkdir test
  • 3.cd:进入目录 cd test;
  • 4.cd . . 返回上一个目录
  • 5.删除目录 rmdir test
  • 6.rm -rf ,删除目录(非空或者空目录都可以删除)推荐使用
  • 7.touch:创建文件 touch test.txt;
  • 8.删除文件:rm text.txt
  • 9.cp:拷贝 cp test.txt test2.txt
  • 10.显示当前目录pwd
  • 11.打开成可视化的文件夹open
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容