Ⅰ python里面的函数是什么意思
1、Python中的函数是什么意思?
如果你需要实现一个功能,那么你需要用代码来实现。
那么Python中为你设置了一些固定功能的代码,实现一个功能的这些代码就是一个函数。
简而言之,函数就是实现特有的功能,你可以直接调用的内建函数。
2、函数举例
Python内置了许多函数,我们可以直接调用。
比如:abs函数,是用来求绝对值的。
如下图所示,a就是输入,b就是经过函数处理后得到的输出。
具体如何求绝对值?我们不管,abs帮我们做好了,我们只要把他需要的值给他就行了
Ⅱ Python的函数都有哪些
Python 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以def关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
语法
def functionname( parameters ): "函数_文档字符串"
function_suite
return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
实例
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
实例(Python 2.0+)
def printme( str ): "打印传入的字符串到标准显示设备上"
print str
return
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 定义函数def printme( str ): "打印任何传入的字符串"
print str
return
# 调用函数printme("我要调用用户自定义函数!")printme("再次调用同一函数")
以上实例输出结果:
参数传递
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3]
a="Runoob"
以上代码中,[1,2,3]是 List 类型,"Runoob"是 String 类型,而变量 a 是没有类型,她仅仅是一个对象的引用(一个指针),可以是 List 类型对象,也可以指向 String 类型对象。
可更改(mutable)与不可更改(immutable)对象
在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。
不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变a的值,相当于新生成了a。
可变类型:变量赋值la=[1,2,3,4]后再赋值la[2]=5则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
python 函数的参数传递:
不可变类型:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
python 中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。
python 传不可变对象实例
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
def ChangeInt( a ): a = 10
b = 2ChangeInt(b)print b # 结果是 2
实例中有 int 对象 2,指向它的变量是 b,在传递给 ChangeInt 函数时,按传值的方式复制了变量 b,a 和 b 都指向了同一个 Int 对象,在 a=10 时,则新生成一个 int 值对象 10,并让 a 指向它。
传可变对象实例
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明def changeme( mylist ): "修改传入的列表"
mylist.append([1,2,3,4])
print "函数内取值: ", mylist
return
# 调用changeme函数mylist = [10,20,30]changeme( mylist )print "函数外取值: ", mylist
实例中传入函数的和在末尾添加新内容的对象用的是同一个引用,故输出结果如下:
参数
以下是调用函数时可使用的正式参数类型:
必备参数
关键字参数
默认参数
不定长参数
必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用printme()函数,你必须传入一个参数,不然会出现语法错误:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printme( str ): "打印任何传入的字符串"
print str
return
#调用printme函数printme()
以上实例输出结果:
关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
以下实例在函数 printme() 调用时使用参数名:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printme( str ): "打印任何传入的字符串"
print str
return
#调用printme函数printme( str = "My string")
以上实例输出结果:
下例能将关键字参数顺序不重要展示得更清楚:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printinfo( name, age ): "打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
#调用printinfo函数printinfo( age=50, name="miki" )
以上实例输出结果:
默认参数
调用函数时,默认参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
#可写函数说明def printinfo( name, age = 35 ): "打印任何传入的字符串"
print "Name: ", name
print "Age ", age
return
#调用printinfo函数printinfo( age=50, name="miki" )printinfo( name="miki" )
以上实例输出结果:
不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ): "函数_文档字符串"
function_suite
return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。不定长参数实例如下:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明def printinfo( arg1, *vartuple ): "打印任何传入的参数"
print "输出: "
print arg1
for var in vartuple: print var
return
# 调用printinfo 函数printinfo( 10 )printinfo( 70, 60, 50 )
以上实例输出结果:
匿名函数
python 使用 lambda 来创建匿名函数。
lambda只是一个表达式,函数体比def简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda函数的语法只包含一个语句,如下:
如下实例:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数print "相加后的值为 : ", sum( 10, 20 )print "相加后的值为 : ", sum( 20, 20 )
以上实例输出结果:
return 语句
return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。之前的例子都没有示范如何返回数值,下例便告诉你怎么做:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
# 可写函数说明def sum( arg1, arg2 ): # 返回2个参数的和."
total = arg1 + arg2
print "函数内 : ", total
return total
# 调用sum函数total = sum( 10, 20 )
以上实例输出结果:
变量作用域
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
全局变量
局部变量
全局变量和局部变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:
实例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*-
total = 0 # 这是一个全局变量# 可写函数说明def sum( arg1, arg2 ): #返回2个参数的和."
total = arg1 + arg2 # total在这里是局部变量.
print "函数内是局部变量 : ", total
return total
#调用sum函数sum( 10, 20 )print "函数外是全局变量 : ", total
以上实例输出结果:
Ⅲ python 定义函数
python 定义函数:
在Python中,可以定义包含若干参数的函数,这里有几种可用的形式,也可以混合使用:
1. 默认参数
最常用的一种形式是为一个或多个参数指定默认值。
>>> def ask_ok(prompt,retries=4,complaint='Yes or no Please!'):
while True:
ok=input(prompt)
if ok in ('y','ye','yes'):
return True
if ok in ('n','no','nop','nope'):
return False
retries=retries-1
if retries<0:
raise IOError('refusenik user')
print(complaint)
这个函数可以通过几种方式调用:
只提供强制参数
>>> ask_ok('Do you really want to quit?')
Do you really want to quit?yes
True
提供一个可选参数
>>> ask_ok('OK to overwrite the file',2)
OK to overwrite the fileNo
Yes or no Please!
OK to overwrite the fileno
False
提供所有的参数
>>> ask_ok('OK to overwrite the file?',2,'Come on, only yes or no!')
OK to overwrite the file? test
Come on, only yes or no!
OK to overwrite the file?yes
True
2. 关键字参数
函数同样可以使用keyword=value形式通过关键字参数调用
>>> def parrot(voltage,state='a stiff',action='voom',type='Norwegian Blue'):
print("--This parrot wouldn't", action, end=' ')
print("if you put",voltage,"volts through it.")
print("--Lovely plumage, the",type)
print("--It's",state,"!")
>>> parrot(1000)
--This parrot wouldn't voom if you put 1000 volts through it.
--Lovely plumage, the Norwegian Blue
--It's a stiff !
>>> parrot(action="vooooom",voltage=1000000)
--This parrot wouldn't vooooom if you put 1000000 volts through it.
--Lovely plumage, the Norwegian Blue
--It's a stiff !
>>> parrot('a thousand',state='pushing up the daisies')
--This parrot wouldn't voom if you put a thousand volts through it.
--Lovely plumage, the Norwegian Blue
--It's pushing up the daisies !
但是以下的调用方式是错误的:
>>> parrot(voltage=5, 'dead')
SyntaxError: non-keyword arg after keyword arg
>>> parrot()
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <mole>
parrot()
TypeError: parrot() missing 1 required positional argument: 'voltage'
>>> parrot(110, voltage=220)
Traceback (most recent call last):
File "<pyshell#58>", line 1, in <mole>
parrot(110, voltage=220)
TypeError: parrot() got multiple values for argument 'voltage'
>>> parrot(actor='John')
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <mole>
parrot(actor='John')
TypeError: parrot() got an unexpected keyword argument 'actor'
>>> parrot(voltage=100,action='voom',action='voooooom')
SyntaxError: keyword argument repeated
Python的函数定义中有两种特殊的情况,即出现*,**的形式。
*用来传递任意个无名字参数,这些参数会以一个元组的形式访问
**用来传递任意个有名字的参数,这些参数用字典来访问
(*name必须出现在**name之前)
>>> def cheeseshop1(kind,*arguments,**keywords):
print("--Do you have any",kind,"?")
print("--I'm sorry, we're all out of",kind)
for arg in arguments:
print(arg)
print("-"*40)
keys=sorted(keywords.keys())
for kw in keys:
print(kw,":",keywords[kw])
>>> cheeseshop1("Limbuger","It's very runny, sir.","It's really very, very runny, sir.",shopkeeper="Michael Palin",client="John",sketch="Cheese Shop Sketch")
--Do you have any Limbuger ?
--I'm sorry, we're all out of Limbuger
It's very runny, sir.
It's really very, very runny, sir.
----------------------------------------
client : John
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
>>>
3. 可变参数列表
最常用的选择是指明一个函数可以使用任意数目的参数调用。这些参数被包装进一个元组,在可变数目的参数前,可以有零个或多个普通的参数
通常,这些可变的参数在形参列表的最后定义,因为他们会收集传递给函数的所有剩下的输入参数。任何出现在*args参数之后的形参只能是“关键字参数”
>>> def contact(*args,sep='/'):
return sep.join(args)
>>> contact("earth","mars","venus")
'earth/mars/venus'
4. 拆分参数列表
当参数是一个列表或元组,但函数需要分开的位置参数时,就需要拆分参数
调用函数时使用*操作符将参数从列表或元组中拆分出来
>>> list(range(3,6))
[3, 4, 5]
>>> args=[3,6]
>>> list(range(*args))
[3, 4, 5]
>>>
以此类推,字典可以使用**操作符拆分成关键字参数
>>> def parrot(voltage,state='a stiff',action='voom'):
print("--This parrot wouldn't", action,end=' ')
print("if you put",voltage,"volts through it.",end=' ')
print("E's", state,"!")
>>> d={"voltage":"four million","state":"bleedin' demised","action":"VOOM"}
>>> parrot(**d)
--This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
5. Lambda
在Python中使用lambda来创建匿名函数,而用def创建的是有名称的。
python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量
python lambda它只是一个表达式,而def则是一个语句
>>> def make_incrementor(n):
return lambda x:x+n
>>> f=make_incrementor(42)
>>> f(0)
42
>>> f(2)
44
>>> g=lambda x:x*2
>>> print(g(3))
6
>>> m=lambda x,y,z:(x-y)*z
>>> print(m(3,1,2))
4
6. 文档字符串
关于文档字符串内容和格式的约定:
第一行应该总是关于对象用途的摘要,以大写字母开头,并且以句号结束
如果文档字符串包含多行,第二行应该是空行
>>> def my_function():
"""Do nothing, but document it.
No, really, it doesn't do anything.
"""
pass
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn't do anything.
Ⅳ python中的 for f in sorted(set(basket)):中的set()是什么函数呢
dict
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
举个例子,假设要根据同学的名字查找对应的成绩,给定一个名字,要查找对应的成绩,如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。
用Python写一个dict如下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2, 3])
>>> s
set([1, 2, 3])
注意,传入的参数[1, 2, 3]是一个list,而显示的set([1, 2, 3])只是告诉你这个set内部有1,2,3这3个元素,显示的[]不表示这是一个list。
重复元素在set中自动被过滤:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
set([1, 2, 3])
Ⅳ 如何用Quartz Signal快速实现Worldquant 101 Alpha
优矿的500万实盘在如火如荼地进行中,我们已经看到有矿友利用经典的机器学习算法和新的Quartz Signal模块对于优矿上现有因子的利用进行探索,但是对于大多数信号/因子研究者来说,寻找新的Alpha依然是其孜孜以求的目标。
如何去寻找新的Alpha因子的灵感成为摆在量化研究者面前无法回避的问题。
我们注意到,Zura Kakushadze 等人最新发表的论文101 Formulaic Alpha(…) 里提到了很多基于价量数据构建的"Alpha"因子,为我们提供了很多新的灵感。
本文将先简单介绍论文中提到的Alpha因子表达式语法以及含义,之后会介绍如何用Quartz Signal便捷地实现这些Alpha,最后会提供2个在论文中出现并且效果不错的Alpha因子供大家参考。
Formulaic Alpha简介
研读过上文提到的论文,我们发现,论文中提到的Formulaic Alpha就是用一个表达式来表示一个Alpha因子:
· 写出的表达式是在每一个调仓日对每一支按照该表达式进行计算
· 例如:1/close; 对universe中每一支,计算1/closePrice,然后此向量被标准化,即除以其数值的总和(所有数值相加的结果为 1)。这将为所有创建了一个基于“权重”的向量,每个权重代表投资组合中投资于该的资金比例
· 其支持的数据有:open(开盘价)/close(收盘价)/high(最高价)/low(最低价)/vwap(日内交易量加权价格)/returns(单日收益率)等等
我们认为这种Formulaic Alpha的表达形式有以下特点:
· 表达简洁,但隐藏了太多细节,用户无法看到具体的调仓信息
· 受限于表达式表达能力的不足,提供了丰富的内置函数,帮助用户完成了cross-sectional信息的处理
内置函数
· 可分为横截面函数和时间序列函数两大类,其中时间序列函数名多为以ts_开头
· 大部分函数命名方式较为直观
· abs(x) log(x)分别表示x的绝对值和x的自然对数
· rank(x)表示某x值在横截面上的升序排名序号,并将排名归一到[0,1]的闭区间
· delay(x,d)表示x值在d天前的值
· delta(x,d)表示x值的最新值减去x值在d天前的值
· correlation(x,y,d) covariance(x,y,d)分别表示x和y在长度为d的时间窗口上的Pearson相关系数和协方差
· ts_min(x,d) ts_max(x,d) ts_argmax(x,d) ts_argmin(x,d) ts_rank(x) sum(x,d) stddev(x,d)等均可以通过函数名称了解其作用
· 更多地函数解释可以参考论文的附录
Quartz Signal模块简介
正如API帮助文档中提到的,Signal模块是优矿为方便因子/信号研究者提供的工具,将用户从与信号研究无关的数据获取、下单逻辑中抽离出来,用户可以将精力集中于按照自己的思路开发新的信号。
使用Signal自定义信号的通用实现过程如下:
def foo(data, dependencies=['PE 39;], max_window=4):
return data['PE 39;].mean()
# in initialize(account)
a = Signal("signal_a", foo)
account.signal_generator = SignalGenerator(a)
# in handle_data(account)
account.signal_result['signal_a']
我们可以将Quartz Signal的使用过程分为四个步骤:
定义实现信号逻辑的函数(在上例中即为foo函数)
在initialize函数中定义Signal,在实例化Signal类时将信号名字和描述函数作为参数传入
在initialize函数中将需要使用的信号注册到account.signal_generator中,可以注册多个信号
在handle_data中通过account.signal_result获取计算好的信号值
我们重点介绍一下用户需要完成的信号描述函数:
信号描述函数实际上是用户在每一个调仓日对于可以获得数据的处理逻辑
信号描述函数名可以按照Python函数的命名规范任意定义,但其参数必须为一个非关键字参数data,两个关键字参数dependencies和max_window
dependencies的参数格式必须为str构成的list,list的元素为该函数中需要使用的因子名称,具体支持因子列表参考帮助文档
max_window的参数格式为int,表示用户希望用到过去max_window天的因子数据
data则是根据dependencies和max_window,Quartz Signal模块帮助用户取到的数据,其格式为一个dict,key为因子名称,value为max_window*universe_length的Pandas DataFrame
信号描述函数的返回值必须为一个长度与data中每一元素列数相同的Pandas Series
如下图所示:
上图描述的就是data的结构,其中data只有一个元素,其key为"PE",value就是上图表格所示的Pandas DataFrame,具体地,其columns为universe的secID,其index为%Y%m%d格式的日期字符串
Quartz Signal v.s. Formulaic Alpha
由上述描述可见,使用Quartz Signal模块可以便捷地实现Formulaic Alpha,同时相比Formulaic Alpha表达式有以下优势:
更加直观:
o用户在预先定义信号描述函数时,就可以明晰地定义自己需要的因子数据和时间窗口
o用户可以在Quartz框架中灵活定义自己的调仓频率和下单逻辑,并可以直观地看到每次调仓的列表
更加灵活:
oFormulaic Alpha限制了表达式的计算结果必须代表相应在投资组合中的权重,而Quartz Signal并没有此限制,用户可以在handle_data中按照自己的想法任意处理信号值
o信号描述函数的data是以Pandas DataFrame的格式传入的,这样用户就可以在函数中同时看到横截面数据和时间序列数据,为用户提供了更多可能
更加强大:信号描述函数的data是以Pandas DataFrame的格式传入的,Pandas丰富的内置函数可以帮助我们完成较复杂Formulaic Alpha表达式才能完成的任务(见最后一个示例)
更多数据:Quartz Signal不仅支持openPrice/closePrice/highPrice/lowPrice/turnoverVol等价量信息,还支持PE、RSI等更丰富的因子
下面我们就用Quartz Signal模块实现了一个论文中提到的Formulaic Alpha:
用Quartz Signal实现一个Formulaic Alpha
以WebSim论文中alpha 53为例,其原始表达式为:
(−1∗delta((((close−low)−(high−close))/(close−low)),9))
化简可得,((close - low) - (high - close)) / (close - low)的9日之前值-当前值
继续化简可得:(2∗close−low−high)/(close−low)
我们深入研究该因子可以发现:
(2∗close−low−high)/(close−low)=1−(high−close)/(close−low)
前面的常数1可以通过delta消掉,其实可以简化为(high−close)/(close−low)的现值-9天之前的值
而(high−close)/(close−low)本身则代表了收盘价在日内波动中的位置,可以看做是买入意愿的一种体现
我们强烈建议大家在实现这些Formulaic Alpha因子之前先花一些精力去理解其经济含义,不仅可以加深对其原理的理解,在某些时候还可以简化实现。
我们以论文中的Alpha 26为例,其原始表达式为:
−1∗ts_max(correlation(ts_rank(volume,5),ts_rank(high,5),5),3)
我们当然可以按照其原始表达式一步步地先对过去5天的成交量和最高价进行排名,再取相关系数;但是较熟悉Pandas DataFrame内置函数或者统计知识较丰富的研究者可以发现,correlation(ts_rank(volume,5),ts_rank(high,5),5) 其实就是在计算Spearman Rank Correlation Coefficient,使用DataFrame内置的corr(method="spearman")函数就可以完成计算,可以大大提高开发效率。
在我们的模拟的过程中发现,如果按照原公式进行计算,无论是long还是short的结果都跑不赢大盘,同时对于成交量和最高价相关性较高的将会是市场追逐的热点,应该分配更大的权重。
所以在上述代码中我们将原Formulaic Alpha前面的负号去掉。
当然,对于论文中出现的某些因子可能较难于理解其经济学意义,我们鼓励大家用Quartz Signal将其实现之后发到社区上与大家一起讨论。
对于Quartz Signal模块有哪些不尽如人意的地方也可以反馈给我们,帮助我们持续改进。
Ⅵ python函数与方法的区别总结
1、函数的分类:
内置函数:python内嵌的一些函数。
匿名函数:一行代码实现一个函数功能。
递归函数
自定义函数:根据自己的需求,来进行定义函数。
2、方法的分类:
普通方法:直接用self调用的方法。
私有方法:__函数名,只能在类中被调用的方法。
属性方法:@property,将方法伪装成为属性,让代码看起来更合理。
特殊方法(双下划线方法):以__init__为例,是用来封装实例化对象的属性,只要是实例化对象就一定会执行__init方法,如果对象子类中没有则会寻找父类(超类),如果父类(超类)也没有,则直接继承object(python 3.x)类,执行类中的__init__方法。类方法:通过类名的调用去操作公共模板中的属性和方法。
静态方法:不用传入类空间、对象的方法, 作用是保证代码的一致性,规范性,可以完全独立类外的一个方法,但是为了代码的一致性统一的放到某个模块(py文件)中。
其次,从作用域的角度来分析:
(1)函数作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调用者后,开辟的空间会自动释放。
(2)方法作用域:通过实例化的对象进行方法的调用,调用后开辟的空间不会释放,也就是说调用方法中对变量的修改值会一直保留。
最后,调用的方式不同。
(1)函数:通过“函数名()”的方式进行调用。
(2)方法:通过“对象.方法名”的方式进行调用。
Ⅶ python里面有哪些自带函数
python系统提供了下面常用的函数:
1. 数学库模块(math)提供了很多数学运算函数;
2.复数模块(cmath)提供了用于复数运算的函数;
3.随机数模块(random)提供了用来生成随机数的函数;
4.时间(time)和日历(calendar)模块提供了能处理日期和时间的函数。
注意:在调用系统函数之前,先要使用import 语句导入 相应的模块
该语句将模块中定义的函数代码复制到自己的程 序中,然后就可以访问模块中的任何函数,其方 法是在函数名前面加上“模块名.”。
希望能帮到你。
Ⅷ 简述python函数中参数的几种形态
在调用函数时,通常会传递参数,函数内部的代码保持不变,针对 不同的参数处理不同的数据。
有位置传参、关键字传参、默认值参数、多值参数等。
1、参数传递
形参和实参:
形参:定义 函数时的 参数变量
实参:调用 函数时,使用的参数变量
参数传递的过程,就是 把实参的引用 传递给 形参 ,使用实参的值来执行函数体的过程。
在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的
2、位置实参
按照参数位置,依次传递参数,这是最普通的方式。