python基础复习

基础复习

x = 34;y=12;z=43
a = {"x":x,"y":y,"z":z}
print ('--------分割线--------')
for w in sorted(a, key=a.get):
    print (w, a[w])
print(sorted(a, key=a.get))

1.语句和语法

  • #:注释
  • :转译回车,继续上一行,在一行语句较长的情况下可以使用其来切分成多行,因其可读性差所以不建议使用
  • ;:将两个语句连接到一行,可读性差,不建议使用
  • ::将代码的头和体分开
  • 语句(代码块)用缩进方式体现不同的代码级别,建议采用4个空格(不要使用tab)
  • python文件以模块的方式组织,编写一个.py结尾的文件实际上就写了一个模块

2.专用下划线标识符

  • _xxx:不能用from module import *导入
  • xxx:系统定义名字
  • __xxx:类中私有变量

下划线对于解释器来说有特殊意义,而且是内建标识符所使用符号,不建议自定义变量以下划线开头

但是如果是类中的私有变量,__xxx将会是一个好习惯

补充:

  1. 系统变量__name__会根据python文件被加载方式的不同得出不同的值

    1. python文件被当作模块导入:name=模块名或者文件名
    2. python文件被执行:name=‘main
  2. 在我们使用python编写一个软件时,应该只有一个主程序中包含大量顶级代码(就是没有缩进的代码,

    python解释器读取到顶级代码会立即执行),其他.py文件应该只有少量顶级代码,所有功能都应该封装

    在函数或类中

  3. 通常在文件结尾结合__name__变量,编写测试代码

2.1 Python的工作过程

python 把代码读到内存 2、词法语法分析 3、放到编译器 —》 生成字节码 4、执行字节码 —》生成机器码 CPU执行

Python赋值运算符:

运算符描述示例
=简单的赋值运算符,赋值从右侧操作数左侧操作数c = a + b将指定的值 a + b 到 c
+=加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数c += a 相当于 c = c + a
-=减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数c -= a 相当于 c = c - a
*=乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数c *= a 相当于 c = c * a
/=除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数c /= a 相当于= c / a
%=模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数c %= a is equivalent to c = c % a
**=指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数c **= a 相当于 c = c ** a
//=地板除,并分配一个值,执行地板除对操作和赋值给左操作数c //= a 相当于 c = c // a

Python 位运算符:

二进制换算成10进制:

128 64 32 16 8 4 2 1

二进制是8位的比如说:01001111 换成10进制的就是:1+2+4+8+64 和上面的对比取值

操作符描述示例
&二进制和复制操作了一下,结果,如果它存在于两个操作数。(a & b) = 12 即 0000 1100
|二进制或复制操作了一个比特,如果它存在一个操作数中。(a | b) = 61 即 0011 1101
^二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。(a ^ b) = 49 即 0011 0001
~二进制的补运算符是一元的,并有“翻转”位的效果。(~a ) = -61 即 1100 0011以2的补码形式由于带符号二进制数。
<<二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。a << 2 = 240 即 1111 0000
>>二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。a >> 2 = 15 即 0000 1111

is与==的区别

  • is比较的是id
  • 而==比较的是值

生成器与迭代器

迭代器

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
  3. 访问到一半时不能往回退
  4. 便于循环比较大的数据集合,节省内存
>>> a = iter([1,2,3,4,5])
>>> a
<list_iterator object at 0x101402630>
>>> a.__next__()    结束时   StopIteration

生成器generator

定义:一个函数调用时返回一个迭代器,那这个函数就叫做生成器(generator),如果函数中包含yield语法,那这个函数就会变成生成器

作用:

  • 这个yield的主要效果呢,就是可以使函数中断,并保存中断状态,中断后,代码可以继续往下执行,过一段时间还可以再重新调用这个函数,从上次yield的下一句开始执行。
def cash_out(amount):
    while amount >0:
        amount -= 1
        yield 1<br>        print("擦,又来取钱了。。。败家子!")
 
 
 
ATM = cash_out(5)
 
print("取到钱 %s 万" % ATM.__next__())
  • 另外,还可通过yield实现在单线程的情况下实现并发运算的效果

另外,还可通过yield实现在单线程的情况下实现并发运算的效果

import time
def consumer(name):
    print("%s 准备吃包子啦!" %name)
    while True:
       baozi = yield
 
       print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
 
def producer(name):
    c = consumer('A')
    c2 = consumer('B')
    c.__next__()
    c2.__next__()
    print("老子开始准备做包子啦!")
    for i in range(10):
        time.sleep(1)
        print("做了2个包子!")
        c.send(i)
        c2.send(i)
 
producer("alex")

生成器

参考:http://www.cnblogs.com/wupeiqi/articles/4980620.html

正则表达式

import re #导入模块名
 
p = re.compile("^[0-9]")  #生成要匹配的正则对象 , ^代表从开头匹配,[0-9]代表匹配0至9的任意一个数字, 所以这里的意思是对传进来的字符串进行匹配,如果这个字符串的开头第一个字符是数字,就代表匹配上了
 
m = p.match('14534Abc')   #按上面生成的正则对象 去匹配 字符串, 如果能匹配成功,这个m就会有值, 否则m为None<br><br>if m: #不为空代表匹配上了
  print(m.group())    #m.group()返回匹配上的结果,此处为1,因为匹配上的是1这个字符<br>else:<br>  print("doesn't match.")<br>

正则表达式常用5种操作

re.match(pattern, string)     # 从头匹配

re.search(pattern, string)    # 匹配整个字符串,直到找到一个匹配

re.split()            # 将匹配到的格式当做分割点对字符串分割成列表

re.findall()          # 找到所有要匹配的字符并返回列表格式

re.sub(pattern, repl, string, count,flag)   # 替换匹配到的字符

json与字符串互转

loads:字符串->json

dumps:json->字符串

json 和 pickle

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

进展:https://www.cnblogs.com/alex3714/category/770733.html?page=2

https://www.cnblogs.com/fnng/category/695788.html

python 的****mock

**https://zhuanlan.zhihu.com/p/387903587 **

mock****装饰器使用格式

· @patch(“module名字.方法名”)

· @patch.object(类名, “方法名”)

python 与mock

demo.py

import requests

def send_request(url):
    r = requests.get(url)
    return r.status_code

def visit_baidu():
    url = 'http://www.baidu.com'
    return send_request(url)

访问

from unittest import mock
import unittest
import demo


class TestReq(unittest.TestCase):
    # def test_request_01(self):
    #     # 实例化mock对象,指定返回值,替换原有对象
    #     demo.send_request = mock.Mock(return_value='200')
    #     print(demo.send_request())
    #     self.assertEqual(demo.visit_baidu(), '200')

    # 在测试的参数里对该Mock对象设置一个参数
    @mock.patch("demo.send_request")
    def test_request_01(self, mock_request):
        # 指定一个返回值
        mock_request.return_value = '200'
        self.assertEqual(demo.visit_baidu(), '200')

    def test_request_02(self):
        # 实例化mock对象,指定返回值,替换原有对象
        demo.send_request = mock.Mock(return_value='404')
        print(demo.send_request())
        self.assertEqual(demo.visit_baidu(), '404')


if __name__ == '__main__':
    unittest.main(verbosity=2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值