delphi中的函数传参如何传枚举参数_Python基础之函数编写与传参方式

14059016264c6e6e2be876aaff8b0850.png

主要关键内容:函数编写与传参方式

- 函数是组织好的,可重复使用的的代码段;

- 函数能提高应用的模块性,和代码的重复利用率。

定义函数与调用函数

- 以 def 关键词开头,后接函数名,函数名后接 ();

- ()之间可以用于定义参数;

- 函数内容以冒号起始,并且转行缩进;

- return代表着函数结束,选择性地返回一个值给调用函数。

``

函数参数(重点)

- 定义函数时,参数表中的参数称为形式参数,简称形参;

- 调用函数时,参数表中的参数称为实际参数,简称实参。

参数具有多态性

- 传入不同类型变量,得到不同结果。

```python
def duo(a,b):      #定义函数
    return(a+b)

duo(1,4)           #调用传入两个int值,返回结果5
duo("oh"," my god") #调用并传入两个字符串,返回结果'oh my god'
duo((3,4),("g","h"))  #调用并传入两个元组,执行元组合并,返回(3, 4, 'g', 'h')
duo([7,4],[6,7,8,9])  #调用并传入两个列表,执行列表合并,返回[7, 4, 6, 7, 8, 9]
```

参数赋值传递

- 函数调用时按参数的先后顺序,将实参传递给形参;

- 可以以形参赋值的方式,指定将实参传递给形参。

```python
def fu(a,b):
    return(a+b)   #定义函数

fu("ab","cd")     #返回"abcd",按对应位置将实参传递给了形参;
fu(b="cd",a="ab") #依然返回"abcd",通过形参赋值传参。
```

可变参数(小心使用)

- 当实参是可变对象时,如列表、字典。如在函数中修改形参,因为共享引用。通过实参也获得修改后的对象;

- 详见以下例子。

```python
def kebian1(k):     #定义函数
    k[1] = "hello"

x = [9,10]
kebian1(x)         #调用函数,传递列表对象的引用
print(x)           #返回[9, 'hello'],变量原本的引用被修改

#嗯哼~那么问题来了!!我们应该如何规避这个问题?(看下行的时候请先思考)
#------------------------------------------------------------------
#我们规避的思路就是,复制一份,将克隆的传入形参。原本变量不受影响,如下例:
k = [1,2]
kebian1(k[:])       #调用函数,传递拷贝下来的变量
print(k)            #返回[1, 2],变量没被改变

#还可以在函数内对列表进行拷贝,如下例:
def kebian2(k):     #定义函数
    k = q[:]        #拷贝
    k[1] = 'hello'
    
q = [3,4]
kebian2(q)          #调用函数,传递列表对象的引用
print(q)            #返回[3, 4],变量没被改变
```

参数默认值

- 在定义函数的时候,我们可以给参数设置一个默认值。这样我们在调用函数未提供实参时,函数将按照默认参数执行;

- 带默认值的参数,应当放在参数表的末尾;

- 为避免出错,默认参数必须指向一个不可变参数。

```python
def info(name = "",degree = "未填写"):   #定义函数,并将参数degree赋予一个默认值“未填写”
    print(name,degree)

info("熊猫酱")          #当只输入一个实参时,会返回熊猫酱 未填写
info("熊猫酱","博士")   #当输入两个实参时,会返回熊猫酱 博士
```

传递任意个参数

- 定义函数是,若参数名前带有"*"号,则表示可接受任意个数的参数,并保存在一个元组中;

- 传参时,"*"号后面的参数必须以关键字传参。

```python
def add(a,*b,c):    #定义函数
    s = a+c 
for i in b:         #为了保证语法不出错,当函数带有"*"号的参数时,需要用for循环来循环元组内内容
    s += i
    return s

add(1,2,4,c=9)      #返回结果16,注意*b,后面的参数,传参是必须带上关键字。

```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi 调用 Python 编写的 DLL 的自定义函数,可以使用 Python4Delphi 库。 首先需要将 Python4Delphi 库添加到 Delphi 项目,具体步骤如下: 1. 下载并解压 Python4Delphi 库,获取其的文件。 2. 在 Delphi 项目新建一个“Package”工程。 3. 在“Package”工程添加以下文件: - PythonEngine.dcu - PythonGUIInputOutput.dcu - PythonTypes.dcu - PyScripterRemoteDebugger.dcu - VariantSupport.dcu 4. 在“Package”工程添加以下文件夹: - Python - Packages - Scripter 5. 将 Python4DelphiPython 文件夹、Packages 文件夹和 Scripter 文件夹的所有文件复制到“Package”工程对应的文件夹。 6. 在“Package”工程打开“Project Options”,在“Directories and Conditionals”添加以下路径: - ..\Python - ..\Packages - ..\Scripter 7. 在“Package”工程打开“Project Options”,在“Linking”添加以下文件: - python27.lib - python27.dll 8. 在“Package”工程打开“Project Options”,在“Packages”勾选以下选项: - DesignIDE - rtl - vcl 9. 在“Package”工程编译并安装库文件。 安装完 Python4Delphi 库后,就可以使用以下代码在 Delphi 调用 Python 编写的 DLL 的自定义函数: ```delphi uses PythonEngine; var Python: TPythonEngine; Module, FunctionObject, Args, Result: PPyObject; Value: Integer; begin Python := TPythonEngine.Create(nil); try Python.LoadDll('my_python.dll'); Python.Initialize; Module := Python.ImportModule('my_module'); FunctionObject := Module.GetMethod('my_function'); Args := Python.PyTuple_New(1); Value := 123; Python.PyTuple_SetItem(Args, 0, Python.PyLong_FromLong(Value)); Result := Python.PyObject_CallObject(FunctionObject, Args); ShowMessage(IntToStr(Python.PyLong_AsLong(Result))); finally Python.Finalize; Python.Free; end; end; ``` 其,“my_python.dll”为 Python 编写的 DLL 文件名,“my_module”为 DLL 的模块名,“my_function”为 DLL 的自定义函数名。在此示例,我们调用了一个带有一个整型参数函数,并将其返回值转换为整型后输出。 需要注意的是,Python4Delphi 库使用的是 Python 2.7 版本。如果使用的是 Python 3.x 版本,需要对库文件进行相应修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值