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 "", line 1, in 
    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

>>> 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
 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

你可能感兴趣的:(python 基础(一))