def __call__(self):
     l_log('instances are callable now.')
# @Time    : 2018/9/6 PM9:11
# @Author  : L
# @Email   : [email protected]
# @File    : built_in_functions.py
# @Software: PyCharm

from Code.Tools.l_log import *

# Built-in Functions
# Python 内置方法
# Python 解释器有许多内置的函数和类型, 按字母排序介绍

# NOTE 1, abs(x)
# 返回一个数的绝对值。实参可以是整数或浮点数。如果实参是一个复数,返回它的模.

l_log(abs(-1))
l_log(abs(-1))
l_log(abs(-1.1))

# 复数例子
# 复数: (mmp 数学是体育老师教的, 还是我铭记了有借有还的道理?)
#   我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位(python 这里必须用 j 表示?)。
#
# 这个应该是计算复数的模, 而不是简单的3+4i=5,这是不存在等的关系的!因为一个是虚数,一个是实数。
# 应该是|3+4i|=5
# 复数的模计算方法是:|a+bi|=√(a^2+b^2)
# 所以,|3+4i|=√(3^2+4^2)=5
# 那么,|5+6i|=√61

# 实数范围内,负数没有平方根,所以-1的平方根是不存在的;
# 复数范围内,-1的平方根是正负i。
#
# 1, 负的移位数是非法的,会导致引发 ValueError。
# 2, 左移 n 位等价于不带溢出检测地乘以 pow(2, n)。
# 3, 右移 n 位等价于不带溢出检测地除以 pow(2, n)。
# 4, 使用带有至少一个额外符号扩展位的有限个二进制补码表示(有效位宽度为 1 + max(x.bit_length(), y.bit_length()) 或以上)
# 执行这些计算就足以获得相当于有无数个符号位时的同样结果。

# NOTE 整数类型的附加方法

# int 类型实现了 numbers.Integral abstract base class。 此外,它还提供了其他几个方法:

# 1, int.bit_length()
# 返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零:

n = -37
l_log(bin(n))
l_log(n.bit_length())


# 更准确地说,如果 x 非零,则 x.bit_length() 是使得 2**(k-1) <= abs(x) < 2**k 的唯一正整数 k。
# 同样地,当 abs(x) 小到足以具有正确的舍入对数时,则 k = 1 + int(log(abs(x), 2))。 如果 x 为零,则 x.bit_length() 返回 0。

# 等价于:

def bit_length(self):
    s = bin(self)  # binary representation:  bin(-37) --> '-0b100101'
    s = s.lstrip('-0b')  # remove leading zeros and minus sign
    return len(s)  # len('100101') --> 6


# 3.1 新版功能.
Exemple #4
0
# NOTE False

# 布尔类型的false值,帮False赋值是非法的并引发SyntaxError。
# False = 1 (SyntaxError: can't assign to keyword)

# NOTE True

# 布尔类型的true值,帮True赋值是非法的并引发SyntaxError。
# True = 1 (SyntaxError: can't assign to keyword)

# NOTE None

# NoneType类型的唯一值。

l_log(type(None))
l_log(None.__class__)
l_log(dir(None))

# None通常用于表示缺少值,因为默认参数未传递给函数
# 帮None赋值是非法的并引发SyntaxError。

# None = 1 (SyntaxError: can't assign to keyword)

# 方法里面如果没有返回, 默认返回None


def a():
    pass

# Tk的顶级小部件,主要代表应用程序的主窗口。(根窗口)

# TK 这个类继承于 Wm和Misc, class Tk(Misc, Wm):

tk = Tk(className="123")

# NOTE Wm介绍(提供与窗口管理器通信的功能。)

# NOTE 注:并非所有操作系统均完全支持下方所有方法的实现。

# NOTE 1, wm_aspect(self, minNumer=None, minDenom=None, maxNumer=None, maxDenom=None)
# 控制该窗口的宽高比(width:height)
# 宽高比限制在:minNumer / minDenom ~ maxNumer / maxDenom
# 如果忽略参数,则返回一个 4 元组表示当前的限制(如果有的话)

l_log(tk.aspect())
# tk.aspect(minNumer=1, minDenom=1, maxNumer=1, maxDenom=1)
# l_log(tk.aspect())

# NOTE 2, wm_attributes(self, *args):
# 设置和获取窗口属性
# 如果你只给出选项名,将返回当前窗口该选项的值

# https://wiki.tcl-lang.org/page/wm+attributes

# NOTE 以下选项不支持关键字参数,你需要在选项前添加横杠(-)并用字符串的方式表示,用逗号(,)隔开选项和值。
# 例如你希望设置窗口的透明度为 50%,你应该使用 attribute("-alpha", 0.5) 而不是 attribute(alpha=0.5)

# ('-alpha', 1.0, '-fullscreen', 0, '-modified', 0, '-notify', 0, '-titlepath', '', '-topmost', 0, '-transparent', 0)
l_log(tk.attributes())