请用至少两种方式实现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. MUI - 关于百度定位

    关于百度定位 这是官方定位的解释:geolocation 地图插件配置 我在问答里面找到了这位童鞋的百度定位,地址变更提醒 *** 不过,童鞋倒是给具体的示例啊,木有~~~~(>_<)~~ ...

  2. CVE-2019-0708漏洞利用

    20190514,微软发布补丁,修复了一个严重的RDP远程代码执行漏洞.该漏洞无需身份认证和用户交互,可能形成蠕虫爆发,影响堪比wannycry. 影响范围: Windows 7 Windows Se ...

  3. win10 uwp 使用动画修改 Grid column 的宽度

    今天 wurstmitbrot 问如何通过动画修改 Grid 的 column ,虽然 column 是一个依赖属性,可以绑定,但是做出动画还是比较难的. 本文告诉大家如何对 Grid 做动画. 首先 ...

  4. mysql把一个表的字段update成另一个表的字段根据id

    mysql把一个表的字段update成另一个表的字段根据id 1.填充activity表里面的creator字段,用org的founderid,其中activity的orgid要和org的id对应,具 ...

  5. PDM->OOM->C#实体类生成时,对Blob类型字段的处理

    pdm中的Blob字段生成OOM时,自动变成了string类型,再生成实体类时也是string 如何将oom中对应的blob字段设置为Byte[]类型,目前没找到方法, 只能通过脚本,将生成后的OOM ...

  6. PyODPS DataFrame 处理笛卡尔积的几种方式

    PyODPS 提供了 DataFrame API 来用类似 pandas 的接口进行大规模数据分析以及预处理,本文主要介绍如何使用 PyODPS 执行笛卡尔积的操作. 笛卡尔积最常出现的场景是两两之间 ...

  7. HZOI20190714 T1序列

    什么沙雕题啊……考察的是啥啊,分类咋搞啊……愁死我了…… 先把作者的正解放出来: 序列因为选出的一段是一个等比序列的子序列,我们分为两种情况:1. q=1,相当于找一个最长每个数都相等的子串,这个扫一 ...

  8. 在web.xml中配置SpringMVC

    代码如下 <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.spr ...

  9. Spring MVC 解决 Could not write JSON: No serializer found for class java.lang.Object

    Spring MVC 解决 Could not write JSON: No serializer found for class java.lang.Object 资料参考:http://stack ...

  10. MongonDB指令汇总

    MongoDB特点使用不存在的对象,就等于你在创建这个对象(库,表,记录) MongoDB服务器/客户端相关 (记得把配置环境变量bin,MongonDB安装后bin在C盘的programfile-- ...