重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、函数定义
凤冈网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
①使用def关键字定义函数
②
def 函数名(参数1.参数2.参数3...):
"""文档字符串,docstring,用来说明函数的作用"""
#函数体
return 表达式
注释的作用:说明函数是做什么的,函数有什么功能。
③遇到冒号要缩进,冒号后面所有的缩进的代码块构成了函数体,描述了函数是做什么的,即函数的功能是什么。Python函数的本质与数学中的函数的本质是一致的。
2、函数调用
①函数必须先定义,才能调用,否则会报错。
②无参数时函数的调用:函数名(),有参数时函数的调用:函数名(参数1.参数2.……)
③不要在定义函数的时候在函数体里面调用本身,否则会出不来,陷入循环调用。
④函数需要调用函数体才会被执行,单纯的只是定义函数是不会被执行的。
⑤Debug工具中Step into进入到调用的函数里,Step Into My Code进入到调用的模块里函数。
使用Python的ctypes,我们可以直接调用由C直接编译出来的函数。其实就是调用动态链接库中的函数。为什么我们需要这样做呢,因为有些时候,我们可能需要一个性能上比较讲究的算法,有些时候,我们可以在Python中使用已经有了的现成的被封闭在动态链接库中的函数。下面是如何调用的示例。
首先,我们用一个乘法来表示一个算法功能。下面是C的程序:
int multiply(int num1, int num2){
return num1 * num2;
}
如果在Windows下,你可能需要写成下面这个样子:
#include windows.h
BOOL APIENTRYDll
Main(HANDLE hModule, DWORD dwReason, LPVOID lpReserved){
return TRUE;
}
__declspec(dllexport)
intmultiply(int num1, int num2){
return num1 * num2;
}
然后,自然是把这个C文件编成动态链接库:
Linux下的编译:
gcc -c -fPIC libtest.c
gcc -shared libtest.o -o libtest.so
Windows下的编译:
cl -LD libtest.c -libtest.dll
于是在我们的Python中可以这样使用:
(其中的libtest.so在Windows下改成libtest.dll即可)
from ctypes import *
import os
libtest = cdll.LoadLibrary(os.getcwd() + '/libtest.so')
print libtest.multiply(2, 2)4
注意:上面的Python脚本中需要把动态链接库放到当前目录中。
今天遇到同样的问题,就来答一波吧
1,如果是在类中,那么就很简单了,类中的一个函数调用另一个函数,只要在那个被调用的函数前加self即可(图如下,详细可以参考笔者博客),
2,如果不是在类中,(这是笔者遇到的问题),有一个简单的方法,如下sin_f函数调用sin函数(注:a=sin()不能写到sin_f()函数下,会说a没声明就调用):
3,如果是已经存在的包,那么调用包更简单了,(同样可以参考笔者上面给的那个博客第四部分)
4,最后,更多关于python问题可以参考笔者的python教程笔记
概要等式运算函数中参数的定义与调用定义函数时*的作用:out定义函数时:**OUTOUT调用函数时,和*均是为了分配参数用的调用函数时:*:调用函数时:**:
概要
关于""和"*"两个特殊符号的区别,首先在python中是没有指针的,与C++有很大的不同。
等式运算
python中常用的乘法运算符*
3*7
21
l=[2 * i for i in range(100) ]
l
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102,
104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198]
函数中参数的定义与调用
如果在定义函数时,代表收集参数,*代表收集关键字参数。
定义函数时*的作用:
def symbols(*params):
print(params)
out
symbols(1,2,3)
(1,2,3)
此时*是将调用时提供的所有值,放在一个元组里。
这种情况下,在函数定义时的形参里的*params后面,就最好不要再加入别的形参了,比如你定义成 def symbols(*params,x) ,调用的时候symbols(1,2,3),就会报错。因为这样python分不清哪个数据是给params的。如果你非要这么定义也行,不过在调用的时候,必须显示的指出哪个值是给x的。比如symbols(1,2,x=3),通过这种方式调用才不会出错。
定义函数时:**
对于之前参数是*params的情况,symbols并不能传入关键字参数。仍然采取这种方式定义时:会报错
def symbols1(*params):
print(params)
OUT
symbols1(x=1,y=2,z=3)
Traceback (most recent call last):
File "stdin", line 1, in module
TypeError: symbols1() got an unexpected keyword argument 'x'
报错
因为*号并不会收集关键字参数。所以需要如下方式修改,采用两个星号:
def symbols2(**params):
print(params)
这样调用symbols2就不会有问题:
OUT
symbols2(x=1,y=2,z=3)
{'z'=3,'x'=1,'y'=2}
以上输出得到一个字典。字典中元素的先后顺序取决于你的环境。
调用函数时,和*均是为了分配参数用的
调用函数时:*:
例如,还是刚刚那个print函数
def symbols(x,y):
print(x)
print(y)
两个形参,如果只想传入一个形参呢
对,“调用函数时分配参数”跟“定义函数时收集参数”,反过来了!
假设你还有一个元组:
params=(1,2)
可以通过如下方式调用symbols函数:
symbols(*params)
就可以输出:
1
2
调用函数时:**:
和上面*时一样,只是分配的是字典。
params={'x':1,'y':2}
可以通过如下方式调用symbols函数:
symbols(**params)
就可以输出:
1
2
%用来获得除法运算的余数,比如5%2=1
divmod(x,y)这个函数也可以获得商和余数,比如divmod(5,2),返回的值为(2,1),其中2为商,1为余数
Python是支持四则运算的,Python中的乘法运算也很简单,如下:
假设变量a的值是10,变量b的值是21,则
更多技术请关注Python视频教程。