《假如爱有天意》
当天边那颗星出现,你可知我又开始想念,有多少爱恋只能遥遥相望,就像月光洒向海面,年少的我们曾以为,相爱的人就能到永远,当我们相信情到深处在一起,听不见风中的叹息,谁知道爱是什么,短暂的相遇却念念不忘,用尽一生的时间,竟学不会遗忘,如今我们已天各一方,生活的像周围人一样,眼前人给我最信任的依赖,但愿你被温柔对待,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,短暂的相遇却念念不忘,多少恍惚的时候,仿佛看见你在人海川流,隐约中你已浮现,一转眼又不见,当天边那颗星出现,你可知我又开始想念,有多少爱恋今生无处安放,冥冥中什么已改变,月光如春风拂面。
最想听又不敢听的一首歌。
一、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__的话,测试完就要注释掉测试代码,不然别的脚本引入你的脚本就会又执行一遍测试代码,当然规范一点的做法还是写专门的测试脚本。