金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > 内建函数扫盲,0四大新特性代码示例与解读

内建函数扫盲,0四大新特性代码示例与解读

发布时间:2019-11-04 05:41编辑:编程浏览(108)

    摘要:今天我们结合代码实例来具体看一下C#4.0中的四个比较重要的特性。

    Built-in Functions
    abs() dict() help() min() setattr()
    all() dir() hex() next() slice()
    any() divmod() id() object() sorted()
    ascii() enumerate()   
    input() oct() staticmethod() 
    bin() eval() int() open() str()
    bool() exec() isinstance()  ord() sum()
    bytearray() filter() issubclass()  pow() super()
    bytes() float() iter() print() tuple()
    callable() format() len() property()    
    type()
    chr() frozenset() list() range() vars()
    classmethod()  getattr() locals() repr() zip()
    compile() globals() map() reversed()    
    complex() hasattr() max() round()  
    delattr() hash() memoryview() set()  

    项目特殊需要,调用ActiveX三维控件进行控件某一特殊部位的截图操作,这个截图保存由ActiveX控件控制保存到本地是没问题的,现在需要将这个截图上传到服务器,多人共享,就牵扯到需要读取本地文件……后沟通后,ActiveX控件方提供一个接口,返回相关截图文件的Base64编码字符串,由Web应用程序转换为对应格式,存储在服务器即可。

      之前的文章中,我们曾介绍过C#的历史及C# 4.0新增特性,包括:dynamic、 命名和可选参数、动态导入以及协变和逆变等。今天我们结合代码实例来具体看一下C#4.0中的四个比较重要的特性。

     

    遇到问题:

      1.dynamic ExpandoObject

    abs(x)

      求一个数的绝对值。

    >>> abs(13)
    13
    >>> abs(-15)
    15
    

    Base-64 字符数组或字符串的长度无效

      熟悉js的朋友都知道js可以这么写 :

    all(iterable)

      如果迭代器中的所有值都为“真”则返回 True, 否则返回 False

      注意: 如果迭代器为空,返回 True

    >>> all([1,1,1])
    True
    >>> all([1,0,1])
    False
    >>> all([])
    True
    

    直接调用Convert.FromBase64String方法时,报“Base-64 字符数组或字符串的长度无效”的错误。

    var t = new Object(); t.Abc = ‘something’; t.Value =243;

    any(iterable)

      如果迭代器中的任意一个值为“真”则返回 True, 否则返回 False

      注意:如果迭代器为空,返回 False

    >>> any([1,0,0])
    True
    >>> any([0,0,0])
    False
    >>> any([])
    False
    
    MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64));
    

      现在这个js动态语言的特性,我们也可以在c#中使用了,前提是将一个变量声明为ExpandoObject类型。如下例:

    ascii(object)

      该函数返回表示对象的可打印ascii字符串,如果字符串中含有非ascii字符,则以x, u 或者 U 编码来表示

      函数其实是返回了对象的 __repr__() 方法的值

    >>> a = 123
    >>> a.__repr__()
    '123'
    >>> ascii(a)
    '123'
    >>> 
    >>> b = 'test'
    >>> b.__repr__()
    "'test'"
    >>> ascii(b)
    "'test'"
    >>>
    >>> class MyTest:
    ...     def __repr__(self):
    ...         return 'Hello, world.'
    ... 
    >>> t = MyTest()
    >>> t.__repr__()
    'Hello, world.'
    >>> ascii(t)
    'Hello, world.'
    

    于是想到对ActiveX返回的Base64字符串进行编码操作

        static void Main(string[] args)
      {

    bin(x)

      将整型转换为二进制的字符串,字符串以'0b' 开头.

      不过说是将整型转换为二进制,其实是将对象的__index__() 方法返回的值转换为二进制字符串

      注意: 如果对象没有__index__() 方法,将会产生异常

    >>> bin(11)
    '0b1011'
    >>> class MyTest():
    ...     def __index__(self):
    ...         return 5
    ... 
    >>> t = MyTest()
    >>> bin(t)
    '0b101'
    
    base64 = System.Web.HttpUtility.HtmlEncode(base64);
    
    MemoryStream stream = new MemoryStream(Convert.FromBase64String(base64));
    

            dynamic t = new ExpandoObject();

     bool(x)

      如果对象为“真”则返回 True, 否则返回 False

    >>> bool(0)
    False
    >>> bool(1)
    True
    

    运行程序,报“输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符”错误。

            t.Abc ="abc";

     bytearray([source[, encoding[, errors]]**])

      创建一个 “可变的” byte数组,可以使用整型,字符串和迭代器来初始化

      参数为字符串时,字符串中的每一个字符将转换为数组的元素,因此需要提供编码类型,类似utf-8, ascii

      参数为整型时,整形值将作为数组的初始化大小,数组的元素则初始化为0

      参数为迭代器时,迭代器的每一个元素将作为数组的元素,因此迭代器的值必须为0-255的整型,否则将产生异常。

    >>> a = bytearray(10)
    >>> a
    bytearray(b'x00x00x00x00x00x00x00x00x00x00')
    >>> a[0]
    0
    >>> len(a)
    10
    >>> 
    >>> b = bytearray('abc', 'utf-8')
    >>> b
    bytearray(b'abc')
    >>> b[0]
    97
    >>> 
    >>> c = bytearray(range(1,5))
    >>> c
    bytearray(b'x01x02x03x04')
    >>> c[0]
    1
    >>> 
    >>> d = bytearray([1,2,3])
    >>> d
    bytearray(b'x01x02x03')
    >>> d[1] = 20
    >>> d
    bytearray(b'x01x14x03')
    

    最终解决方案:

            t.Value =10000;
            Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);

    bytes([source[, encoding[, errors]]**])

      bytesbytearray的一个不可变的版本,其他的可以参考bytearray

    >>> d = bytes([1,2,3])
    >>> d
    b'x01x02x03'
    >>> d[1] = 20
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'bytes' object does not support item assignment
    

    对Base64字符串进行特殊字符替换,并进行PadRight操作,解决问题

            Console.ReadLine();

    callable(object)

      判断对象是否可以调用,如果可以则返回 True, 否则返回 False

      类是可调用的,调用后返回一个类的实例。对象如果包含了__call__()方法也是可调用的。

      其实,只要可以写成 object() 的,都是callable

    >>> def foo():
    ...     pass
    ... 
    >>> callable(foo)
    True
    >>> 
    >>> class MyTest:
    ...     def __call__(self):
    ...         pass
    ... 
    >>> callable(MyTest)
    True
    >>> a = MyTest()
    >>> callable(a)
    True
    >>> 
    >>> b = 1
    >>> callable(b)
    False
    
    string dummyData = base64.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
    if (dummyData.Length % 4 > 0)
    {
        dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
    }
    MemoryStream stream = new MemoryStream(Convert.FromBase64String(dummyData));
    

      }

     chr(i)

      返回Unicode对应的字符。

      参数范围为 0 -- 1114111, 超过此范围将产生异常

    >>> chr(97)
    'a'
    >>> chr(1666)
    'ڂ'
    >>> chr(1200000)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: chr() arg not in range(0x110000)
    

    最后提供一下封装的Base64Helper类,提供Base64字符串与文件之间相互转换操作。

      C# 4.0中新增了一个命名空间System.Dynamic来实现对此应用的支持,这种用法的意义何在,现在我还不太清楚,也是C#向动态语言过渡的一种试探吧。

    classmethod(function)

      一般作为函数装饰器 @classmethod

      将类中的一个方法指定为类方法。被指定的类方法第一个参数必须为cls(方法所在的类)

      类方法的调用可以直接通过类调用,即C.f(); 也可以通过实例调用,即C().f()

      类方法有一个比较方便的用处就是作为类似C++中的初始化函数重载

    class MyTest():
        def __init__(self, year, month, day):
            self.year = year
            self.month = month
            self.day = day 
    
        @classmethod
        def from_string(cls, date_string):
            year, month, day = map(int, date_string.split('-'))
            return cls(year, month, day)
    
        def output(self):
            print('Birthday: {}-{}-{}'.format(self.year, self.month, self.day))
    
    
    
    >>> a = MyTest(1989, 12, 26)
    >>> a.output()
    Birthday: 1989-12-26
    >>> 
    >>> b = MyTest.from_string('1990-1-1')
    >>> b.output()
    Birthday: 1990-1-1
    
    /// <summary>
        /// Base64编码字符串与文件转换帮助泪
        /// </summary>
        public class Base64Helper
        {
            /// <summary>
            /// Base64编码字符串转文件
            /// </summary>
            /// <param name="base64">Base64编码字符串</param>
            /// <param name="filename">文件完整路径</param>
            public static void ConvertBase64ToFile(string base64, string filename)
            {
                //base64 = "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";
                string dummyData = base64.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
                if (dummyData.Length % 4 > 0)
                {
                    dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '=');
                }
                MemoryStream stream = new MemoryStream(Convert.FromBase64String(dummyData));
                //filename = @"C:UsersadminDesktopTongjitest.jpg";
                Bitmap img = new Bitmap(stream);
                img.Save(filename);
            }
    
            /// <summary>
            /// 文件转Base64编码字符串
            /// </summary>
            /// <param name="fileName">文件完整路径</param>
            /// <returns></returns>
            public static string ConvertFileToBase64(string fileName)
            {
                //fileName = @"C:UsersadminDesktopTongjitest.jpg";
                FileStream fs = File.OpenRead(fileName);
                BinaryReader br = new BinaryReader(fs);
                byte[] bt = br.ReadBytes(Convert.ToInt32(fs.Length));
                string base64String = Convert.ToBase64String(bt);
                return base64String;
            }
        }
    

      2.泛型自动转换

    compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)

      该函数将含有python语句的字符串编译成可执行的字节码,编译的结果配合 eval, 或 exec 使用。

      source -- 需要编译的字符串

      filename -- 存储字符串的文件

      mode -- 'eval' 配合 eval 使用, 'exec' 配合多语句的 exec 使用,'single' 配合单语句的 exec 使用

      注:实测中,编译的时候会判断mode, 但是执行的时候使用 exec 或者 eval,结果一样

    >>> a = compile('1+2', filename='',  mode='eval')
    >>> eval(a)
    3
    >>> 
    >>> b = compile('for i in range(3): print(i)', filename='', mode='exec')
    >>> exec(b)
    0
    1
    2
    >>> 
    >>> c = compile('print("Hello, world.")', filename='', mode='exec')
    >>> exec(c)
    Hello, world.
    

      在C# 4.0之前下面的代码是不可以编译通过的

    complex([real[, imag]])

      返回一个复数。复数值为  real + imag1j*

      参数也可以为一个表示复数的字符串,但是字符串中不能有空格。使用字符串作为参数时,没有第二个参数。***


      注1: 两个参数的缺省值均为0

      注2: 直接用复数表达式 a+bj 创建的对象也是 complex 类型

    >>> a = complex(1, 2)
    >>> a
    (1+2j)
    >>> 
    >>> b = 2+3j
    >>> type(b)
    <class 'complex'>
    >>> 
    >>> c = complex('5+6j')
    >>> c
    (5+6j)
    >>> 
    >>> d = complex(1+2j, 1+2j)
    >>> d
    (-1+3j)
    

       IEnumerable<object> objs = new List<string> { "I'm 0","I'am 1","I'am 2" };

    delattr(object, name)

      删除对象的一个属性(不能是对象的方法),但是不会影响该类的其他对象。同 del object.name

      **注: 参数* name 是一个字符串


    >>> class MyTest():
    ...     def __init__(self):
    ...         self.test = 'test'
    ... 
    >>> a = MyTest()
    >>> a.test
    'test'
    >>> b = MyTest()
    >>> b.test
    'test'
    >>> delattr(a, 'test')
    >>> a.test
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'MyTest' object has no attribute 'test'
    >>> 
    >>> b.test
    'test'
    

      在C# 4.0中这种声明是允许的,不过也仅限于泛型接口,泛型类型的类似做法是不允许的,如下代码是有编译错误的

    dict(*kwarg)  dict(mapping, **kwarg)  dict(iterable, **kwarg*)

      创建并返回一个字典对象。初始化参数可以有三种传入方式。

      关键字方式,将直接根据关键字生成字典

      迭代器方式,迭代器中的对象必须只有两个元素,第一个元素将作为key,第二个作为值

      映射方式,其实也是一种迭代器方式

      注: 当然也可以直接使用字典作为参数来初始化

    >>> dict(one=1, two=2, three=3)
    {'two': 2, 'one': 1, 'three': 3}
    >>> 
    >>> dict(zip(['one', 'two', 'three'], [1, 2, 3]))
    {'one': 1, 'two': 2, 'three': 3}
    >>> 
    >>> dict([('one', 1), ('two', 2), ('three', 3)])
    {'one': 1, 'two': 2, 'three': 3}
    >>> 
    >>> dict({'one':1, 'two':2, 'three':3})
    {'one': 1, 'two': 2, 'three': 3}
    

       List<object> objList = new List<string> { "I'am 0","I'am 1","I'am 2" };

    dir([object])

      很有用的帮助函数。显示当前命名空间,对象或者类的所有属性和方法。

      object 可以为对象或者类,如果省略表示当前的命名空间

    >>> class MyTest():
    ...     pass
    ... 
    >>> def foo():
    ...     pass
    ... 
    >>> a = 1
    >>> 
    >>> dir()
    ['MyTest', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'foo']
    >>> 
    >>> import math
    >>> dir(math)
    ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
    >>> 
    >>> d = dict()
    >>> dir(d)
    ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
    

      3.方法参数之可选参数

    divmod(a, b)

      返回 (a // b, a % b) 的元组

      注:a,b可以为整型或者浮点型,但是不能是复数

    >>> divmod(7, 3)
    (2, 1)
    >>> 
    >>> divmod(4.3, 1.5)
    (2.0, 1.2999999999999998)
    >>> 
    >>> (4.3 // 1.5, 4.3 % 1.5)
    (2.0, 1.2999999999999998)
    

      如下方法声明的语法

    enumerate(iterable, start=0)

      返回一个可迭代的枚举类型。

      迭代器中的对象,第一个元素为序号(默认从start=0开始),第二个元素为传入迭代器中的对象。

      注: 多用于for遍历过程中,需要同时得到序号的情况。

    >>> names = ['Tom', 'Jack', 'Lily']
    >>> for i, name in enumerate(names, start=1):
    ...     print(i ,name)
    ... 
    1 Tom
    2 Jack
    3 Lily
    

       static void DoSomething(int notOptionalArg, string arg1 ="default Arg1", string arg2 ="default arg2")
      {
          Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
      }

    eval(expression, globals=None, locals=None)

      将一个表示python表达式的字符串编译成python语句并执行(慎用!

      返回值,如果传入参数是字符串或者mode='eval'编译的字节码,则返回交互式运行结果,否则返回None

      globalslocals为高级用法,此处不展开。默认使用当前命名空间。

      注1: 语句必须是单条语句

      注2: 字符串中可以带入变量,但变量必须在命令空间中定义。

      注3: 可以配合compile()使用

    >>> eval('2+5')
    7
    >>> x = 3
    >>> eval('x**2 + 3*x + 5')
    23
    

      这个方法有三个参数第一个是必选参数,第二个和第三个是可选参数,他们都有一个默认值。

     exec(object, [globals[, locals]])

      将一个表示python表达式的字符串编译成python语句并执行(慎用!

      返回值为None

      globalslocals为高级用法,此处不展开。默认使用当前命名空间。

      注1: 语句可以是多条

      注2: 字符串中可以带入变量,但变量必须在命令空间中定义。

      注3: 可以配合compile()使用

    >>> exec('for i in range(5): print(i)')
    0
    1
    2
    3
    4
    

      这种形式对固定参数的几个方法重载很有用。如下调用:

    filter(function, iterable)

      将一个可迭代的对象按传入的函数进行过滤。函数返回 True 的元素将保留,其它将被过滤掉。

    >>> a = [1,2,3,4,5,6,7,8,9]
    >>> list(filter(lambda x: x % 2, a))
    [1, 3, 5, 7, 9]
    

    本文由金沙国际官网发布于编程,转载请注明出处:内建函数扫盲,0四大新特性代码示例与解读

    关键词: