今天想把上次参考着网上教程写的scrapy爬虫改写成requests和beautifulsoup的普通爬虫,写着写着发现自己对python的自定义函数还不是太熟悉(自己TCL了。。。。。。。。。流泪),赶紧菜鸟教程上复习一下,顺便写篇文章。

0x01:关键字

python中,自定义函数使用def关键字,后面加函数名和参数列表,如下:

def 函数名(参数列表):
函数体

如果不需要传参,括号里就不用填,注意,python中不需要定义变量类型。自定义函数除了函数的功能是我们自己编写代码实现的外,其他的与python中的函数并无差别,所以在调用函数时,直接使用函数名就行。眼见为实,来看下面的栗子。

def hello():

    print("hello world!!")

hello()

#输出如下
hello world!!

现在我们就自定义了一个简单的函数,他的功能是输出“hello world!!”,值得注意的是,python中并没用大括号({})划分代码块,python中靠的是相同的缩进,所以在写python时一定要注意一块代码中的缩进

0x02:自定义函数中的变量

在自定义函数时,我们难免会使用到变量,这就关系到了python的局部变量和全局变量,做一个简单的解释,局部变量就是在函数内部定义的变量,全局变量就是在函数内部定义的变量。在函数内部可以访问外面的全局变量,但不可以对全局变量进行修改,但在函数外部,不可以访问局部变量。

>>> a=3
>>> def test():
... print(a) #函数内访问全局变量
...
>>> test()
3
>>> def test4():
... a=a+1
... print(a) #函数内修改全局变量会报错
...
>>> test4()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in test4
UnboundLocalError: local variable 'a' referenced before assignment
>>>
>>> def test3():
... c=5
...
>>> c #外部访问局部变量也会报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'c' is not defined

其实无论是在外部访问局部变量还是在函数内修改全局变量都是有方法的,大家可以百度一下。

0x03:带参数的自定义函数

>>> def test5(m,n):
... print(m*n)
...
>>> test5(2,3)
6
>>>

我们定义了一个带参数的函数,他的功能是计算m*n的值,如果传入的值无法进行运算,则会报错

0x04:参数的传递

python参数的传递分为四种情况:必须参数、关键字参数、默认参数、不定长参数

必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样,上面的test5()函数的两个参数就是必须参数,如果我们只传入一个值,就会报错。如下:

>>> test5(8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: test5() missing 1 required positional argument: 'n'
>>>

关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

>>> def test6(name,age):
... print(name)
... print(age)
...
>>> test6(age=50,name="liang")
liang
50
>>>

参数的顺序是name、age,虽然我们先传入了age,但因为在传入时带上了关键字,所以也不会报错。

默认参数调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

>>> def test7(name,age=50):
... print(name)
... print(age)
...
>>> test7('liang')
liang
50
>>> test7('liang',100)
liang
100
>>>

第一次调用时只传入了name参数,所以age参数使用了默认值,第二只调用时对age参数也传入了值,所以胡覆盖掉默认的50.

值得注意的是:在默认使用参数,第一个默认参数后的所有参数都要是默认参数,就是说,如果你把第二个参数设为默认,那么后面的第三第四...个参数都要是默认的,要不会出现“non-default argument follows default argument”错误.

不定长参数存放所有未命名的变量参数。比如你在函数中值定义了两个参数,而在调用时你需要传入四个或者更多,那么从第三个开始的参数都会被存放到不定长参数中。

>>> def test8(n,*var):
... print(n)
... print(var)
...
>>> test8(1,2,3,4,5,6)
1
(2, 3, 4, 5, 6)
>>>

第一个参数被传递给n,后面都以元祖的形式存放在var这个不定长参数中。

(ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)

python的自定义函数的更多相关文章

  1. Python学习教程(learning Python)--2.1 Python下自定义函数

    在Python里可以自定义函数,实现某特定功能,这里首先要区分一下函数的定义和函数的调用两个基本概念,初学者往往容易混淆. 函数的定义是指将一堆能实现特定功能的语句用一个函数名标识起来,而函数的调用则 ...

  2. python基础:自定义函数

    一.背景 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下 ...

  3. Python应用——自定义函数:分割PDF文件函数

    案例 将一个 pdf 文件按要求分割为几个部分.比如说一个pdf有20页,分成5个pdf文件,每个pdf文件包含4页.设计函数实现? Python代码 from PyPDF2 import PdfFi ...

  4. Python之自定义函数

    函数 1.定义函数 在Python中定义一个函数要使用def语句,一次写出函数名.括号.括号中的的参数和冒号,然后在缩进块中编写函数体,函数的返回值用return返回.如下所示: def 函数名(参数 ...

  5. 初识python: 自定义函数

    什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 函数的定义方法: def test(x): '函数定义方法' x+=1 r ...

  6. 【python】自定义函数def funName():

  7. python学习之--自定义函数:

    Python之--自定义函数: 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 以下自定义 ...

  8. 17.python自定义函数

    什么是函数,函数说白了就是将一系列代码封装起来,实现代码的重用. 什么是代码重用? 假设我有这样的需求: 但是我还是觉得太麻烦了,每次想吃饭的时候都要重复这样的步骤.此时,我希望有这样的机器:

  9. Python学习教程(learning Python)--2.3 Python自定义函数传参函数设计

    Python里自定义子函数时,可以在调用时携带一些参数到子函数里去处理.具体用法结构如下: def func(arguments): statement statement etc. 定义子函数一定要 ...

随机推荐

  1. ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程总结 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基础教程总结 ASP.NET Core 基础教程总算是有了个简单 ...

  2. ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置 ...

  3. RTB业务知识2-Open-RTB全景

    一个.前言 openrtb这是一套开源的竞价广告系统,来自IAB贡献,井. 有许多值太借鉴,提供sdk api接口文档介绍,整理了相关的资料.主要包含其生态图体系.业务流程和基本的对象模型和数据模型. ...

  4. win7在USB该解决方案不健全音箱

    Win7安装后,原XP在正常工作USB小喇叭不工作,重新安装声卡驱动程序仍然是相同的.后来,通过以下的得心应手最后一次尝试. 1.右键右下角喇叭button. 2.点击"播放设备" ...

  5. easyui的datebox最简单的方法来格式化

    看了网上有很多解决方案,我也写了一个比较简单的方法. 实现easyui的datebox格式化. 效果例如以下.用"++"隔开,看你喜欢用什么都能够. 1.html <span ...

  6. SAAS是否能实现人在家工作的梦想?

    在过去的十年,在人们的工作环境的巨大变化已经发生,越来越多的人选择在家工作. 高租金的办公室,络,快速宽带的广泛应用.这些因素都使得远程办公成为了人们工作中密不可分的一种方式.使用普通手机和办公操作系 ...

  7. SharePoint创建内容类型

    SharePoint创建内容类型 内容类型的用途是多种多样的.创建内容类型也非常简单. 1. 点击网站操作--网站设置. 2. 点击网站内容类型,点击创建. 3. 命名Beginning_ShareP ...

  8. 大约Android远程监控APP源代码

    这篇文章的目的,关心询问名人,要打开源代码.这里说明,远程监控摄像头场外,相反,用手机摄像头摄像头server上,要理解这一点.关于非常网上的文章达到server道路.它能够准确,念就乱发博文,当然假 ...

  9. Delphi7程序调用C#写的DLL解决办法

     近来,因工作需要,必须解决Delphi7写的主程序调用C#写的dll的问题.在网上一番搜索,又经过种种试验,最终证明有以下两种方法可行:    编写C#dll的方法都一样,首先在vs2005中创建一 ...

  10. 启动组织重整 Marvell追求创新文化

    最近接任Marvell技术长的Neil Kim正是该公司亟需的人才——他在今年四月加入后,预计将为Marvell带来正面.积极的改革契机,有机会让该公司彻底改头换面... 迈威尔科技(Marvell) ...