欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用python的一些笔记

程序员文章站 2022-05-29 08:04:48
语法 传值与传引用 Python参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。 如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。 如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修 ......

语法

传值与传引用

python参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。

  • 如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。
  • 如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。

数组

数组合并

不能直接使用append函数直接赋值,因为该函数无返回值,可直接用 + 合并两个数组

判断相同和不同数目

#接口返回值
list1 = ['张三', '李四', '王五', '老二']
#数据库返回值
list2 = ['张三', '李四', '老二', '王七']
 
a = [x for x in list1 if x in list2] #两个列表表都存在
b = [y for y in (list1 + list2) if y not in c] #两个列表中的不同元素
 
print('a的值为:',a)
print('b的值为:',b)
 
c = [x for x in list1 if x not in list2]  #在list1列表中而不在list2列表中
d = [y for y in list2 if y not in list1]  #在list2列表中而不在list1列表中
print('c的值为:',c)
print('d的值为:',d)

out:
a的值为: ['张三', '李四', '老二']
b的值为: ['王五', '王七']
c的值为: ['王五']
d的值为: ['王七']

排序

对于具有命名属性的对象:

>>> student_tuples = [
...     ('john', 'a', 15),
...     ('jane', 'b', 12),
...     ('dave', 'b', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
[('dave', 'b', 10), ('jane', 'b', 12), ('john', 'a', 15)]

字典排序

  1. sorted函数
    首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数。

其中iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序(从大到小),reverse=false则是顺序(从小到大),默认是reverse=false。

  1. 按照key排序
    要对字典按照key排序,可以直接调用sorted函数。
my_dict = {'lilee':25, 'age':24, 'phone':12}
sorted(my_dict.keys())
输出结果为

['age', 'lilee', 'phone']

直接使用sorted(my_dict.keys())就能按key值对字典排序,这里是按照顺序对key值进行排序的,如果想按照倒序排序的话,只需要将reverse置为true即可。

sorted(my_dcit.keys(), reverse = true)
  1. 按照value值排序
    共有三种方法可以实现将字典按照value值进行排序

(1)key使用lambda匿名函数取value进行排序

d = {'lilee':25, 'wangyan':21, 'liqun':32, 'age':19}
sorted(d.items(), key=lambda item:item[1])
输出结果为
[('age',19),('wangyan',21),('lilee',25),('liqun',32)]

如果需要倒序则
sorted(d.items(), key=lambda item:item[1], reverse=true)
得到的结果就会是
[('liqun',32),('lilee',25),('wangyan',21),(age',19)]

(2)使用operator的itemgetter进行排序

import operator
sorted(d.items(), key=operator.itemgetter(1))
输出结果为

[('age',19),('wangyan',21),('lilee',25),('liqun',32)]

is和==的区别

https://www.cnblogs.com/wangkun122/p/9082088.html

is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。

==比较操作符和is同一性运算符区别

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:

例1.

>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
true

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:

例2.

>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
true
>>> x == z
true
>>> x is y
true
>>> x is z
false
>>>
>>> print id(x)
3075326572
>>> print id(y)
3075326572
>>> print id(z)
3075328140

只有数值型和字符串型的情况下,a is b才为true,当a和b是tuple,list,dict或set型时,a is b为false

后台

requiremnets.txt

pip freeze > requirements.txt //生成
pip install -r requirements.txt //安装

用 r取消转义

虚拟环境创建与激活

pip3 install virtualenv
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt

import unittest

class mytest(unittest.testcase):  # 继承unittest.testcase
    def teardown(self):
        # 每个测试用例执行之后做操作
        print('111')

def setup(self):
    # 每个测试用例执行之前做操作
    print('22222')

@classmethod
def teardownclass(self):
# 必须使用 @ classmethod装饰器, 所有test运行完后运行一次
     print('4444444')
@classmethod
def setupclass(self):
# 必须使用@classmethod 装饰器,所有test运行前运行一次
    print('33333')

def test_a_run(self):
    self.assertequal(1, 1)  # 测试用例
    
def test_b_run(self):
    self.assertequal(2, 2)  # 测试用例
    
if __name__ == '__main__':
    unittest.main()#运行所有的测试用例

json 错误xx is not json serializable

在使用json的时候经常会遇到xxx is not json serializable,也就是无法序列化某些对象

重写jsonencoder

import  decimal
class decimalencoder(json.jsonencoder):
    def default(self, o):
        if isinstance(o, decimal.decimal):
            return float(o)
        super(decimalencoder, self).default(o)

# and then:
json.dumps(chart_list,..., cls=decimalencoder)

运行jupyter notebook

jupyter notebook --ip=0.0.0.0 --no-browser --allow-root