码迷,mamicode.com
首页 > 编程语言 > 详细

python的函数

时间:2018-12-09 20:13:26      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:window   rip   ges   tool   字符   img   help   python3   string   

如果你学过其他语言那么你对函数恐怕不会陌生,函数是一个将代码封装起来的一个代码块,他可以实现对代码的重用,并且隐藏了代码的复杂性所以对于python函数是必不可少的

下面我便来介绍python的函数

一.函数的定义:

定义的结构:

  def 函数名(参数名1:参数的类型,参数名2:参数的类型....) ->返回值的类型:

    """函数的说明文档"""

    语句1

    语句2.....

    return 返回值

当然上面的参数的类型和返回值的类型可有可无,因为解释器并不会解释那几个说明,也不是检查你调用函数时是否与说明的类型是否一致

但是这对使用函数的人来说无疑是友好的,因为在python shell中当你使用help(方法名)命令式他会显示出函数的说明文档以及参数类型和返回

值类型

下面用一段代码来实例:

def findString(letter:str ,phrase :str="aeiou") ->set:#给phrase设置默认值,当没有参数是默认值为其后的值
    """find out the phrase in letter"""
    return set(letter).intersection(set(phrase))

二.函数的使用

1.传参的说明:对于一个函数的使用传参肯定是一个必不可少的过程,但是由于python定义函数时并没有特意的规定哪个参数是什么类型,所以当调用函数是

所给的值的位置都是可以替换的,这将会导致得出得结果并不是你想象中得结果,因为当处理对象发生了改变时,毫无疑问结果肯定也会改变,所以对于传参

python中有两种:

一种是位置传参就是按照参数的位子来放置你指定的传入的值,这跟其他语言相同例如:findString(“sorry” ,"aeiou")

第二种是关键字传参根据提供的关键字来传参例如:findString(letter=“sorry” ,phrase"aeiou")

2.模块使用(一个python文件便是一个模块)

对于你创建的函数,你当然希望可以在其他模块中式用而不式仅限于当前模块,这便需要将你创建的模块导入到要使用的模块中去,这就像java中导入类一样

只有导入后可以使用另一个类中的方法(继承除外) ,当你要导入模块时解释器会先在当前工作目录找,如果找不到的话便会在解释器的site-packages位置找

这个位置包含了你已经安装了的第三方python模块,最后便会在标准库中找。

对于在当前目录下查找,一旦换了工作路径在进行模块导入无疑使非常麻烦的,所以我们将会介绍如何将模块发布到site-packages中,这样我们便可以在任意路径

商使用我们的模块了

创建一个发布描述:

首先在要建立的模块的文件夹中创建两个文件必须命名为setup.py和README.txt其中README.txt可为空文件

setup.py的编写格式为

from setuptools import setup #从setuptools模块中导入setup函数
setup(
    name=mypython, #指定发布包的名字
    version=1.0,
    description=search package,
    author=‘‘,#空的都是可选的
    author=‘‘,
    url=‘‘,    
    py_modules=[findletter], #包中所有“.py”文件的列表
)

 

生成一个发布文件(window):

在命令行窗口中,在你创建对应文件的目录下键入 py -3 setup.py sdist

技术分享图片

执行之后会发现目录中会多两个文件夹一个使dist另一个是mypython.egg-info在dist中会有一个mypython-1.0.zip文件这便是我们的发布文件了

安装发布文件

有了发布文件我们便可以安装了对于python3.4及以上的版本有一个pip(package install for python)python的包安装工具可以是我们很方便

安装发布包我们只需要用管理员权限打开cmd然后键入py -3 -m pip install mypython-1.0.tar.gz便可安装

技术分享图片

到这里我们便已经把我们想要的模块发布到site-packages中去了

这样我们便可以随意的在其他模块中调用该模块了,也可以将我们所写的模块共享给其他人例如:import  findletter  

findString("fdsf","aeiou");

三.函数中实参和形参值的问题

在c,java..中都会存在实参和形参的问题,python中也存在这样的问题,python中同样存在值传递和引用传递

对于可变的数据例如列表,字典,集合,总是按照引用来传入函数,也就是说在函数中改变,在调用代码中也会产生相应的改变

对于不可变的例如字符串,整数,元组,总是按照值来传入函数中,也就是说当在函数中改变时,在调用代码中不会发生改变

但是也许你会碰到下面的特殊情况:

def double(date):
    print("before",date)
    date=date*2
    print("after",date)

>>> number=[1,23,4]
>>> double(number)
before [1, 23, 4]
after [1, 23, 4, 1, 23, 4]
>>> number
[1, 23, 4]

就算对于可变的列表在函数中值发生改变在调用代码中任然不变,这是因为date*2会产生一个新的对象,然后通过赋值语句

将新对象的引用覆盖掉date对就对象的引用,而不是改变所以在调用代码中任然存在所以不会发生改变

 

python的函数

标签:window   rip   ges   tool   字符   img   help   python3   string   

原文地址:https://www.cnblogs.com/sank/p/10091286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!