Fork me on GitHub

【Python】Java程序员学习Python(四)— 内置方法和内置变量

  《假如爱有天意》

  当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱是什么,短暂的相遇却念念不忘,用尽一生的时间,竟学不会遗忘,如今我们已天各一方,生活的像周围人一样,眼前人给我最信任的依赖,但愿你被温柔对待,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,短暂的相遇却念念不忘,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,当天边那颗星出现,你可知我又开始想念,有多少爱恋今生无处安放,冥冥中什么已改变,月光如春风拂面。

  最想听又不敢听的一首歌。

 

一、Python的全局函数

  全局函数这一点和js比较像,用起来很方便,不需要引入额外的模块,直接就可以使用它的方法。

二、全局方法详解

  Python的全局方法有很多,详见官网文档:https://docs.python.org/3/library/functions.html。有些方法用的很频繁,需要记住用法,有些方法不经常用,大致有个印象就可以了,等到想用的时候再去找,不至于自己重新实现,下面是全局函数列表:

  全局函数  
abs():求绝对值
dict():创建字典对象 help():调用内置帮助系统 min():求最小值 setattr():设置对象某个属性的值
all():判断是否为空或所有元素为True dir():返回对象列表 hex():整数转成16进制字符串 next():返回迭代器下一个元素 slice():返回一个slice对象
any():判断是否有一个元素为True divmod():求除数 id():返回对象的标识 object():返回一个新的无特征的对象 sorted():排序
ascii():返回转义后的字符串 enumerate():返回枚举对象 input():获得输入内容 oct():整数转八进制字符串 staticmethod():返回function的一个静态方法
bin():整数转二进制字符串 eval():执行代码 int():字符串转int open():打开一个文件 str():返回object的str版本
bool():返回boolean值 exec():动态执行Python代码 isinstance():判断是否是指定类型 ord():字符转Unicode sum():求和
bytearray():返回新的字节数组 filter():过滤元素 issubclass():判断是否是其子类 pow():求一个数的几次方 super():返回一个代理对象
bytes():返回一个字节对象 float():字符串转换float iter():返回一个迭代器对象 print():打印 tuple():返回一个tuple
callable():判断是否是可调用的 format():格式化 len():返回对象长度(元素个数) property():返回一个property 属性 type():返回对象的类型
chr():返回Unicode表示的字符串 frozenset():返回frozenset对象 list():返回list range():返回区间 vars():返回对象的__dict__属性
classmethod():将函数包装成类方法 getattr():获得对象指定属性的值 locals():更新和返回当前局部符号表的dict repr():返回对象字符串表示 zip():创建一个迭代器
compile():编译代码对象 globals():返回全局符号的dict map():把迭代器每一个对象的应用指定方法 reversed():返回一个反向iterator __import__():不建议使用的方法
complex():解析复数 hasattr():判断对象是否有属性 max():求最大值 round():返回一个浮点型 近似值  
delattr():删除对应属性 hash():返回对象的hash值 memoryview():返回给定参数的“内存视图” set():返回一个新的set 对象  

  首先熟知几个最常用的。

2.1 print()

  这个方法可以说最常用了,和Java的System.out.println()一样经典,用来在控制台打印输出的,当然实际生产的时候还是要用日志框架的。

print(12)
print('abc')
print('hello','world')

  控制台输出:

12
abc
hello world

  用来立即显示结果给人看滴。

2.2 input()

  这个方法我觉得应该定义为初学者方法,用来在请求用户输入数据的,初学某个语言的时候用的比较多,实际生产的时候基本不用,需要的变量基本都会去读配置文件:

name=input();
print('hello',name)

  运行的时候会停住,等待用户输入,输入yiwangzhibujian,就会打印出hello语句,控制台输入输出如下:

yiwangzhibujian
hello yiwangzhibujian

  注意:input接收的都是字符串,即便输入的是1,如果需要数字还要进行转换。

2.3 int()/float()

  这两个方法用的也比较多,就是将字符串转换成整型或者浮点型的方法。

num=int('10')
print(num+1)

  字符串和数字相加是会报错的,所以需要转换。

2.4 isinstance()

  这个方法在定义方法的时候用的比较多,因为Python定义变量的时候不会指定类型,但是用错了类型还是会报错的,所以可以使用这方法来判断变量的类型:

x=123
isNum=isinstance(x, int)
print(isNum)

  如果想要定义一个强壮的函数,还是需要多多使用这个方法的。如果想判断属于多个类型中的一个,可以传入一个tuple:

x=123
isNum=isinstance(x, (int,float))
print(isNum)

  这样,当类型输入其中一种时将会返回True。

2.5 len()

  这个方法用来返回一个对象元素的个数,或者集合元素的个数,文档解释也很清楚

Return the length (the number of items) of an object. The argument may be a sequence (such as a string, bytes, tuple, list, or range) or a collection (such as a dictionary, set, or frozen set).

  最常用的已经介绍完了,其他的全局方法可以都去熟悉一遍,等用到的时候再去查看详细定义也是可以的。

2.6 dir()

  初学用不到,但是中级开发者用的比较多,不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。简单例子如下:

 

name='yiwangzhibujian'
def hello():
    print(name)
print(dir())
=======控制台输出=======
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'hello', 'name']

 

  可以看出dir()方法将当前范围的方法和属性都输出来,这样根据名字可以大致知道用法,再结合注释和测试就可以快速熟悉一个模块。比如常见的sys系统模块:

import sys
print(dir(sys))
=======控制台输出========
['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_getframe', '_home', '_mercurial', '_xoptions', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_wrapper', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'set_asyncgen_hooks', 'set_coroutine_wrapper', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']

  是不是可以看到好多方法,这都是可以使用的。至于用法可以查看文档或者百度,当然百度更快一些。

 

2.7 help()

  这个函数主要用来获得帮助滴,使用方法是:

  • help():获得Python的帮助
  • help(‘模块名’):获得模块名的帮助
  • help(‘模块名.方法名’):获得模块下某个方法的帮助

  在对一个模块或者方法不了解的情况下,多使用help还是有必要的。

三、全局变量

  Python中同样有一些全局变量。现在还没有接触,后续会补上。

3.1 __name__

  两个双下划线中间带有一个name。这是一个Python脚本的全局变量,当执行该脚本的时候,__name__值等于__main__,当引入该脚本的时候,该脚本就是脚本的名称(不带后缀名,py),例如定义一个test.py的脚本并执行:

print(__name__)
=====控制台输出=======
__main__

  但是当另一个脚本引入该脚本的时候,比如新建另一个test2.py,引入刚才新建的脚本(先记得引入一个脚本的时候会执行该脚本):

import test
========控制台输出=======
test

  这个的一个用途就是,方便测试,且别的脚本引入时不会执行:

def isNull(string):
    if string is None:
        return True
    if len(string.strip())==0:
        return True
    return False

if __name__ =='__main__':
    print(isNull(None))
    print(isNull('abc'))
    print(isNull(' '))

  如果没有__name__的话,测试完就要注释掉测试代码,不然别的脚本引入你的脚本就会又执行一遍测试代码,当然规范一点的做法还是写专门的测试脚本。

 

posted @ 2017-06-11 19:06  已往之不谏  阅读(1466)  评论(0编辑  收藏  举报