前端 -- vue接入阿里巴巴图标库
阿里巴巴图标库图标库
接入方式下载图标素材
访问图标库
创建一个自己的项目,没有什么要求,谁便起个名称就行
找到自己要的图标,添加到购物车后添加到项目
进入项目页面,以symbol方式下载到本地(目前只有这种方式支持彩色),解压后得到如下文件目录
添加到vue项目
将素材文件复制到src/assets/icons目录,icons为新建的文件夹,名称和位置都无所谓,放这里比较标准
在src/main.js中引用资源
...
import './assets/icons/iconfont'
import './assets/icons/iconfont.css'
...
在一个父组件src/views/HomeView.vue中添加样式(这一步非必须只是用起来方便)
12345678<style>.icon { height: 25px; width: 25px; margin-right: 10px;}</style>
vue中使用
在需要图标的地方添加一下代 ...
python基础 -- MRO
1234567891011121314151617181920212223242526272829303132333435class A: def method(self): print("CommonA")class B(A): passclass C(A): def method(self): print("CommonC")class D(B, C): passprint("test : {}".format(D().method()))# python2输出CommonAtest : None# python3输出CommonCtest : Noneimport inspectinspect.getmro(D)# python2需要inspect模块(<class __main__.D at 0x101ebab48>, <class __main__.B at 0x101ebaa78>, <class __main__ ...
python基础 -- 函数特性
函数作为对象使用
python中一切皆为对象,函数也是对象,有很多离谱操作
赋值给变量
作为另一个函数的实参
作为函数的返回值
嵌套定义值另一个函数中
lambda表达式1234567891011121314151617181920def add(num1, num2): return num1 + num2print(add(1, 2))print((lambda num1, num2: num1 + num2)(1, 2))le = lambda num1, num2: num1 + num2print(le(1, 2))result = map(lambda x: x * x, [1, 2, 3, 4])print(list(result))def do_sth(): return lambda num1, num2: num1 + num2print(do_sth()(1, 2))
相当于是一个匿名函数,同样是一个对象,也可以像函数那样用
偏函数1234567891011121314151617181920212223242526272829303132333 ...
python基础 -- 动态绑定
12345678910111213141516171819202122232425262728293031323334353637383940414243444546from types import MethodTypeclass Student: passs = Student()s.name = 'test'print(s.name) # testdef set_name(self, name): self.name = names.set_name = MethodType(set_name, s) # 为对象绑定方法,只有该对象可以使用s.set_name('haha')print(s.name) # haha# s1 = Student()# s1.set_name('s1')# 'Student' object has no attribute 'set_name' 这个实例没有绑定该方法Student.set_name = set_name ...
python基础 -- 实例资源和类资源
实例属性和类属性1234567891011121314#!/usr/bin/python3# -*- coding: utf-8 -*-class Student: name = 'globe_name' def __init__(self): self.name = 'name's1 = Student()print(s1.name) # name 实例属性优先级更高,先找实例属性,没有才会找类属性
调用属性会先找实例属性,没有再找类属性
1234567891011121314151617181920212223242526class Student: # 类属性 count = 0 def __init__(self, name) -> None: # 实例属性 self.name = name Student.count += 1for i in range(10): s = Student(i) print('nam ...
python基础 -- 工作目录
案例目录结构123456789101112# 目录结构示意图# project/# ├── task# │ ├── main.py# │ └── ....# ├── util# │ ├── xx_util.py# │ └── ....# └── .... $ python task/main.py
sys.path 就会进入到task 目录中,这样main.py 想要 import main 目录外的模块就会出问题,例如import util.xx_util 就会出现 ModuleNotFoundError, 就算本目录下的文件 import task.xxx 也会出现错误,因为sys.path 不对,在task目录下就没有那些文件。
处理方案这种情况怎么办呢?我看到过几种做法:
方案一sys.path.append(‘..’) 将上一级目录 append 进来非常不推荐这种做法,动态改变sys.path会使静态分析工具失效,例如pycharm 等IDE的代码提示。这在大型项目中会极大降低代码的可阅读性、增加开发难度这是软件开发的灾难(补充:通过环境变量PYTHON ...
python基础 -- 异常处理
try…except12345try: result = 1 / 0 print(result)except ArithmeticError: print("数学错误") # 数学错误
基础的一个处理方式
1234567try: result = 1 / 0 print(result)except ArithmeticError as e: print("数学错误") # 数学错误 print(type(e)) # <class 'ZeroDivisionError'> print(e) # division by zero
可以通过as关键字拿到异常对象做处理
1234567891011121314151617try: result = 1 / 0 print(result)except ZeroDivisionError: print("0不能作为除数")except ArithmeticError: ...
python基础 -- 特殊方法和属性
简述
通过dir()查看类对象或者实例时看到的以双下划线开头和结尾的方法和属性就是特殊方法和特殊属性,基本都是继承自object
通常会去显式的调用特殊资源,除了__init__()以外一般也不会去重写
dict1234567891011121314151617181920212223242526class MyClass(object): ca = "ca" def __init__(self): self.ia = "ia_value" def im(self): pass @classmethod def cm(cls): pass @staticmethod def sm(): passMyClass.ca2 = "ca2"print(MyClass.__dict__)# {'__module__': '__main__', 'ca': 'c ...
python基础 -- 生成器迭代器
生成器12345678ge = (i * i for i in range(1, 7))<!--调用方式一:-->print(next(ge))print(next(ge))print(next(ge))<!--调用方式二-->for item in ge: print(item)
之前讲过python有列表推导和生成器表达式,列表推导会把所有元素都生成放到列表中再进行遍历,而生成器表达式是在遍历的过程中对后续的元素进行生成(保存的不是对应的元素而是如何推算出元素的算法)
123456789101112131415161718def fib(n): i = 0 a, b = 1, 1 while i < n: yield a a, b = b, a + b i += 1gf = fib(6)print(next(gf))print(next(gf))gf = fib(6)for item in gf: print(item)
生成器是是用yield进行实现的,和Java多线程中的 ...
python基础 -- 脚本传参
12345678910import argparseif __name__ == '__main__': parser = argparse.ArgumentParser(description='此脚本运行需要输入必要参数') parser.add_argument('--pid', '-p', help='产品ID,必要参数', required=True) args = parser.parse_args() prodcut_id = args.pid