python笔记-数据类型

获取数据类型

type(val)

if type(1) == int:
    print('1是int类型')
if type('hello') == str:
    print('1是字符串类型')
if type(1.5) == float:
    print('1是float类型')
if type([1,2]) == list:
    print('1是list类型')

类型转换

print(int('123'))
print(str('123'))
print(float('123'))

占位符

world = 'world'
message2 = f'hello {world}'


# %5d代表宽度,多余字符输出空格;%.2f代表2个小数位
message = "hello 字符串:%5s 浮点:%.2f 数字:%5d" % (15,15,15)

python的types模块

1.types是什么:

types模块中包含python中各种常见的数据类型,如IntType(整型),FloatType(浮点型)等等。

>>> import types
 
>>>dir(types)
['BooleanType',
 'BufferType',
 'BuiltinFunctionType',
 'BuiltinMethodType',
 'ClassType',
 'CodeType',
 'ComplexType',
 'DictProxyType',
 'DictType',
 'DictionaryType',
 'EllipsisType',
 'FileType',
 'FloatType',
 'FrameType',
 'FunctionType',
 'GeneratorType',
 'GetSetDescriptorType',
 'InstanceType',
 'IntType',
 'LambdaType',
 'ListType',
 'LongType',
 'MemberDescriptorType',
 'MethodType',
 'ModuleType',
 'NoneType',
 'NotImplementedType',
 'ObjectType',
 'SliceType',
 'StringType',
 'StringTypes',
 'TracebackType',
 'TupleType',
 'TypeType',
 'UnboundMethodType',
 'UnicodeType',
 'XRangeType',
 '__all__',
 '__builtins__',
 '__doc__',
 '__file__',
 '__name__',
 '__package__']

2.types常见用法:

# 100是整型吗?
>>> isinstance(100, types.IntType)
True
 
>>>type(100)
int
 
# 看下types的源码就会发现types.IntType就是int
>>> types.IntType is int
True

但有些类型并不是int这样简单的数据类型:

class Foo:
   def run(self):
       return None

def bark(self):
   print('barking')

a = Foo()

print(type(1))
print(type(Foo))
print(type(Foo.run))
print(type(Foo().run))
print(type(bark))

输出结果:

<class 'int'>
<class 'type'>
<class 'function'>
<class 'method'>
<class 'function'>

python中总有些奇奇怪怪的类型。有些类型默认python中没有像int那样直接就有,单但其实也可以自己定义的。

>>> import types
 
>>> class Foo:
        def run(self):
            return None
    
    def bark(self):
        print('barking')
 
# Foo.run是函数吗?
>>> isinstance(Foo.run, types.FunctionType)
True
 
# Foo().run是方法吗?
>>> isinstance(Foo().run, types.MethodType)
True

3.MethodType动态的给对象添加实例方法:

import types
class Foo:
    def run(self):
        return None
 
def bark(self):
    print('i am barking')
 
a = Foo()
a.bark = types.MethodType(bark, a)
a.bark()

如果不用MethodType而是直接a.bark = bark的话,需要在调用bark时额外传递self参数,这不是我们想要的。

types.GeneratorType

是Python中的一个内置类型,表示一个生成器对象。生成器是一种特殊的迭代器,它可以在需要时即时生成值,而不是一次性生成并存储在内存中(如列表)。

生成器函数使用 yield 关键字定义,它允许函数返回一个值,并在下一次调用时从上一次离开的地方继续执行。当生成器函数被调用时,它返回一个生成器对象,可以使用 for 循环或 next() 函数进行迭代。

下面是一个生成斐波那契数列的生成器函数示例:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a+b

当该函数被调用时,它返回一个生成器对象,可以用来生成斐波那契数列:

>>> fib = fibonacci()
>>> next(fib)
0
>>> next(fib)
1
>>> next(fib)
1
>>> next(fib)
2
>>> next(fib)
3
types.GeneratorType 类型用于检查一个对象是否为生成器对象:

>>> isinstance(fib, types.GeneratorType)
True

在实际开发中,生成器对象可以用来处理大量数据或无限序列,避免一次性将所有数据存储在内存中,从而提高程序的性能和效率。例如,可以使用生成器对象来处理大型日志文件,或者生成无限的自然数序列。

posted @ 2023-05-05 13:59  .Neterr  阅读(38)  评论(0编辑  收藏  举报