请用至少两种方式实现m与n值交换m=10,n=5

# 方式一
temp = 0
m = 10
n = 5
print(f'方式一交换前,m:{},n:{}')
temp = m
m = n
n = temp
print(f'方式一交换后,m:{},n:{}') # 方式二
m = 10
n = 5
m, n = n, m
print(f'方式二交换前,m:{},n:{}')
print(f'方式二交换后,m:{},n:{}')

你所知道的能够实现单例模式的方式有哪些,尝试着手写几个

'''
单例模式:让所有类在实例化时,指向同一内存地址
实现单例模式的5种方式:
1.通过关键字classmethod实现
2.通过装饰器实现
3.通过__new__实现
4.通过导入模块实现
5.通过元类实现
'''
# 通过关键字classmethod实现
class Singleton:
def __init__(self, *args, **kwargs):
pass @classmethod
def instance(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = cls(*args, **kwargs)
return cls._instance # 通过装饰器实现
def singleton(cls):
_instance = {} def inner(*args, **kwargs):
if cls not in _instance:
_instance[cls] = cls(*args, **kwargs)
return _instance[cls]
return inner # 通过__new__实现
class Singleton:
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super().__new__(cls)
return cls._instance # 通过导入模块实现
# a.py
class Singleton:
def __init__(self):
pass singleton_obj = Singleton() # b.py
from a import singleton_obj
print singleton_obj # 通过元类实现
class SingletonMeta(type):
def __call__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super().__call__(*args, **kwargs) return cls._instance class Singleton(metaclass=SingletonMeta):
def __init__(self):
pass

数值进制之间的转换

# 二进制转换成十进制
v = '0b1111011'
print(int(v, 2)) # 第二个参数表示是什么进制的数字
# 十进制转换成二进制
v = 18
print(bin(v)) # bin() 将十进制转换成二进制 # 八进制转换成十进制
v = '0o11'
print(int(v, 8)) # 第二个参数表示是什么进制的数字
# 十进制转换成八进制
v = 30
print(oct(v)) # oct() 将十进制转换成二进制 # 十六进制转换成十进制
v = '0x12'
print(int(v, 16)) #第二个参数表示是什么进制的数字 # 十进制转换成十六进制
v = 87
print(hex(v)) # hex() 将十进制转换成十六进制 '''
总结:
1.其他进制转换成十进制,通过int来实现
语法:int(其他进制数, 进制[数字表示])
2.十进制转其他进制的语法
十进制转换成二进制:bin()
十进制转换成八进制:oct()
十进制转换成十六进制:hex()
'''

简述可迭代对象,迭代器对象,生成器对象及应用场景

# 参照https://www.cnblogs.com/xiaoyuanqujing/protected/articles/11640962.html
# 参照https://www.cnblogs.com/nickchen121/p/10778506.html
'''
可迭代对象:从语法来说,凡是有内置方法__iter__()的对象都是可迭代对象,比如说str(字符串),list(列表),tuple(元组),dict(字典),set(集合),file(打开文件) 迭代器:用于迭代取值的工具,每一次对过程的重复称为一次迭代,每一次迭代的结果会作为下一次迭代的初始值,每一次都更逼近所需目标或结果 迭代器对象:可迭代对象通过内置方法__iter__()得到的返回值,就是迭代器对象。
特点:
1.有__next__()内置方法,执行该方法会得到迭代器对象中的一个值
2.有__iter__()内置方法,执行该方法会得到迭代器本身
3.打开的文件本身就是一个迭代器对象
优点:
1.为序列和非序列数据类型提供了一种统一的迭代取值方式
2.惰性计算:迭代器对象表示的是一个数据流,可以只在需要时才去调用__next__()来计算一个值,就迭代器本身来说,同一个时刻在内存中只有一个值,因此可以存放无限大的数据流
缺点:
1.取值麻烦,只能一个一个取,并且只能往后取,值取出后就没了
2.无法使用len()方法获取长度
应用场景:
1.for循环
2.逐行遍历文本文件
3.列表推导、字典推导和集合推导 生成器对象:
生成器是构造迭代器的最简单有力的工具,本质就是一个迭代器,自定义的迭代器。使用方式跟普通函数类似,不同点在于返回一个值的时候使用yield来代替return,yield关键字会自动构建好next()和iter()
特点:也有内置方法__next__()和__iter__()
应用场景:
1.不想同一时间将所有计算出来的大量结果集分配到内存当中,特别是结果集里还包含循环。 总结:
1.迭代器:节约内存;读取数据的一种方式
2.生成器:本质就是迭代器,可理解为自定义的迭代器,用于生成数据
3.可迭代对象、迭代器和生成器之间的关系:
'''

什么是元类?元类的应用场景有哪些,能具体说说吗?

'''
在python中,万物皆对象,对象是通过类实例化的结果,那么类是怎么来的?类是元类实例化的结果,也就是创建类的类。
ps:一个类在实例化的过程中,做了以下事情
1.触发元类中(造出这个类的类)的__call__方法(通过对象+()的方式触发)
2.通过__new__产生一个空对象(在__init__触发前触发)
3.通过__init__初始化这个对象(在实例化的时候触发)
4.返回这个对象 元类的场景
1.ORM(Object Relational Mapping),即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表
2.实现单例模式
'''

python知识点总结02(不定时更新)的更多相关文章

  1. python知识点总结01(不定时更新)

    手写一个完整的装饰器模版 # 用于修复被装饰对象的名称空间 from functools import wrape def wrapper(func): @wraps(func) def inner( ...

  2. python --error整理(不定时更新)

    1.TabError: inconsistent use of tabs and spaces in indentation Python 中需要用tab 键来空格 2.SyntaxError: in ...

  3. python 常用函数(不定时更新)

    1.遍历文件夹 import os def FileList(rootDir): FL=[] for lists in os.listdir(rootDir): path=os.path.join(r ...

  4. Python有趣现象(不定时更新)

    1.list中extend方法有趣现象 1.1 List+=Str 与 List.extend(Str) list1 = [11,2,45] str1 = 'Michael' list1.extend ...

  5. Python知识点汇总

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  6. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  7. python2.x和3.x的区别(不定时更新)

    python2.x和3.x的区别 文:铁乐与猫 2018.3.16新增博文,为方便以后总结Python2.x与3.x的不同版本之间的区别,随时更新. python原本的宗旨是崇尚优美.清晰.简单.但p ...

  8. iOS 属性修饰符记录 --不定时更新

    重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰 ...

  9. linux下svn定时更新项目

    方法一.用shell脚本定时更新项目   1.进入网站的根目录,假设项目位置放在/var/www/test cd /var/www/test   2.建立脚本文件update.sh,分两步进行.首先利 ...

随机推荐

  1. Python基础:03序列:字符串、列表和元组

    一:序列 1:连接操作符(+) 这个操作符允许把一个序列和另一个相同类型的序列做连接,生成新的序列.语法如下:sequence1 + sequence2 该表达式的结果是一个包含sequence1和s ...

  2. 【学生研究课题】CSDN博客数据获取、分析、分享

    题记     这次<对象程序设计>课程设计,一共给定了8个选题(下载WORD版.PDF版),以及自由选题的机会.从大家初步选题结果来看(图1).绝大部分同学选择了"图形用户界面的 ...

  3. 洛谷P1510 精卫填海

    //01背包 求背包内物品价值超过某一定值时的最小体积 #include<bits/stdc++.h> using namespace std; ; ; int n,v_tot,w_tot ...

  4. ImportError: No module named libqt_gui_cpp_shiboken

    在使用 rosrun rqt_publisher rqt_publisher 调用ROS图形化界面的过程中出现: 而且在使用图像化界面添加/cmd_vel时,无法添加,命令窗口显示“段错误”. 在网上 ...

  5. SLS机器学习最佳实战:日志聚类+异常告警

    1.手中的锤子都有啥? 围绕日志,挖掘其中更大价值,一直是我们团队所关注.在原有日志实时查询基础上,今年SLS在DevOps领域完善了如下功能: 上下文查询 实时Tail和智能聚类,以提高问题调查效率 ...

  6. List of the best open source software applications

    List of the best open source software applications by Ryan • Oct 25th, 2008 • Category: Featured Art ...

  7. Top 10 Free IT Certification Training Resources

    1. Cybrary Cybrary takes the open source concept and applies it to IT training. Many of the courses ...

  8. mysql数据库之单表查询

    单标查询 单表查询语句 关键字执行的优先级 简单查询 where约束 group by 聚合函数 HAVING过滤 order by 查询排序 LIMIT限制查询的记录数 使用正则表达式查询 单表查询 ...

  9. java文件操作 之 创建文件夹路径和新文件

    一:问题 (1)java 的如果文件夹路径不存在,先创建: (2)如果文件名 的文件不存在,先创建再读写;存在的话直接追加写,关键字true表示追加 (3)File myPath = new File ...

  10. @hdu - 6584@ Meteor

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 询问第 k 小的分子分母 ≤ n 的既约分数. Input 第一 ...