python基础

这篇文章主要的内容是不同语言的比较,python基本数据类型,socket相关,线程与进程,高阶函数:迭代器,生成器,装饰器

python和java的区别

  1. JAVA编译以后才能运行,python直接就可以运行;
  2. JAVA是混合型语言,python是解释型语言。JAVA可以是解释型的,因为java代码编译后不能直接运行,它是解释运行在JVM上的;但是现在的JVM为了效率,都有一些JIT优化,它又会把.class的二进制代码编译为本地的代码直接运行。
  3. JAVA 的类型要声明,Python 的类型不需要。
  4. JAVA 中的字符串以双引号括起来,Python 中单引号或双引号都可以
  5. python是弱类型语言,java是强类型。
  6. Python是函数为一等公民的语言,而Java是类为一等公民的语言

python和java都是面向对象的

定义

  • 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。

  • 解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

区别

  • 编译型语言,执行速度快、效率高;依靠编译器、跨平台性差些。

  • 解释型语言,执行速度慢、效率低;依靠解释器、跨平台性好。

为什么python比较慢

Python的缓慢主要是由于它动态的特点。每次读取、写入变量或引用变量类型时都会进行检查,比较和转换类型是耗时的。
另外,在具有多个cpu的机器上使用多线程时,python都会比较慢。这是由于python中GIL的存在,python的多线程是伪多线程,他在同一时刻只能运行一个线程,但其他语言比如说java,就可以在多个核上同时运行多个线程。

基本数据类型

  1. 不可变:frozenset不可变集合,数值(整数,浮点数,复数,bool),字符串,元组
  2. 可变:字典,列表,集合set

socket相关

socket

Socket 是一种网络间不同计算机上的进程通信的一种方法

python&socket

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
c,addr = s.accept()     # 建立客户端连接
print '连接地址:', addr
c.send('欢迎访问菜鸟教程!')
c.close()                # 关闭连接

web socket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。

socket和web socket的区别

  1. Socket 是传输控制层的接口。用户可以通过 Socket 来操作底层 TCP/IP 协议族通信。
  2. WebSocket 是一个完整应用层协议。
  3. Socket 更灵活,WebSocket 更易用。
  4. 两者都能做即时通讯

为什么有了 HTTP 还需要 WebSocket?

http通信协议不是双工的,只能客户端先发送请求,服务器响应请求。如果有需要服务端主动通知的业务,就需要轮询(客户端定时向服务端发送请求)。轮询的效率低,非常浪费资源。为了解决 Web 端即时通讯的需求就出现了 WebSocket。

装饰器

本质上,decorator就是一个返回函数的高阶函数。装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。可以进行插入日志、性能测试、权限校验这些操作。

迭代器和生成器的区别

在python的实现中:

  • 实现了__iter__方法和__next__方法的类对象,就是迭代器
  • 使用yield语句返回结果就是生成器

定义

迭代器

迭代器是用来帮助我们记录每次迭代访问到的位置,当我们对迭代器使用next()函数的时候,迭代器会向我们返回它所记录位置的下一个位置的数据
iter()函数会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内的元素。
next()也是python内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。

class Fib(object):
    def __init__(self, max):
        self.max = max

    def __iter__(self):
        self.a = 0
        self.b = 1
        return self

    def __next__(self):
        fib = self.b
        if fib > self.max:
            raise StopIteration
        self.a, self.b = self.b, self.a + self.b
        return fib

# 定义一个main函数,循环遍历每一个菲波那切数
def main():
    # 20以内的数
    fib = Fib(20)
    for i in fib:
        print(i)

生成器

延迟操作。也就是在需要的时候才产生结果,不是立即产生结果。.
区别:生成器是只能遍历一次的。
联系:生成器是一类特殊的迭代器。

def Fib(max):
    a, b = 0, 1
    for _ in range (max):
        yield b
        a, b = b, a + b
    return 

变量打印

方法1

直接print(变量名)

方法2

运用%:

print ("%s %s " %(a,b))#两个变量要加()

说明:

(1) %字符:标记转换说明符的开始

(2) 转换标志:-表示左对齐;+表示在转换值之前要加上正负号;“”(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充

(3) 最小字段宽度:转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。

(4) 点(.)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将从元组中读出

字符串格式化转换类型

转换类型 含义
d,i 带符号的十进制整数
o 不带符号的八进制
u 不带符号的十进制
x 不带符号的十六进制(小写)
X 不带符号的十六进制(大写)
e 科学计数法表示的浮点数(小写)
E 科学计数法表示的浮点数(大写)
f,F 十进制浮点数
g 如果指数大于-4或者小于精度值则和e相同,其他情况和f相同
G 如果指数大于-4或者小于精度值则和E相同,其他情况和F相同
C 单字符(接受整数或者单字符字符串)
r 字符串(使用repr转换任意python对象)
s 字符串(使用str转换任意python对象)

上一篇
bisect&pop,remove,del的区别&双指针使用场景 bisect&pop,remove,del的区别&双指针使用场景
这篇文章有三个知识点: python的二分查找库bisect pop,remove,del的区别 双指针使用场景的简单说明 bisectbisect是一种数组二分查找算法库,返回合适的插入位置索引。 参考:https://docs.p
2021-02-03
下一篇
刷题一周总结 2020.12.20 刷题一周总结 2020.12.20
递归与回溯对比 来自拉勾《300分钟搞定数据结构与算法》之递归与回溯 顺序 回溯 递归 第一步 判断当前情况是否非法,如果非法就立即返回 判断输入或者状态是否非法,如果非法就报错 第二步 当前情况是否已经满足递归结束条件,
2020-12-20
目录