python快速入门【四】-----各类函数创建
python入门合集:
python快速入门【三】-----For 循环、While 循环
Python中的函数是什么?
在Python中,function是一组执行特定任务的相关语句。
函数有助于将我们的程序分解为更小的模块化块。随着我们的计划越来越大,功能使其更加有条理和易于管理。
此外,它避免重复并使代码可重用
创建函数的语法
def function_name(parameters):
"""docstring"""
statement(s)
上面显示的是一个函数定义,它由以下组件组成。
- 关键字def标记函数头的开始。
- 用于唯一标识它的函数名称。函数命名遵循在Python中编写标识符的相同规则。
- 参数(参数),我们通过它将值传递给函数。它们是可选的。
- 冒号(:)标记函数头的结尾。
- 用于描述函数功能的可选文档字符串(docstring)。
- 构成函数体的一个或多个有效的python语句。语句必须具有相同的缩进级别(通常为4个空格)。
- 用于从函数返回值的可选return语句。
如何在python中调用函数?
一旦我们定义了一个函数,我们就可以从另一个函数,程序甚至Python提示符中调用它。要调用函数,我们只需使用适当的参数键入函数名称
In [2]
name = "Emma"
def greet(name):
"""This function greets to
the person passed in as
parameter"""
print("Hello, " + name + ". Good morning!")
greet(name)
Hello, Emma. Good morning!
文档字符串
函数头之后的第一个字符串称为docstring,是文档字符串的缩写。它用于简要解释函数的作用。
虽然可选,但文档是一种很好的编程习惯。除非你能记住你上周吃的晚餐,否则请记录你的代码。
在上面的示例中,我们在函数头的正下方有一个docstring。我们通常使用三引号,以便docstring可以扩展到多行。我们可以将此字符串作为函数的__doc__属性使用。
例如:
In [3]
print(greet.__doc__)
This function greets to
the person passed in as
parameter
返回语句
return语句用于退出函数并返回到调用函数的位置。如下:
return [expression_list]
此语句可以包含要求求值的表达式,并返回值。如果语句中没有表达式,或者函数内部不存在return语句本身,则该函数将返回None对象。
例如:
In [5]
print(greet("May"))
Hello, May. Good morning!
None
这里,None是返回值
再举个例子
In [6]
def absolute_value(num):
"""This function returns the absolute
value of the entered number"""
if num >= 0:
return num
else:
return -num
# Output: 2
print(absolute_value(2))
# Output: 4
print(absolute_value(-4))
2
4
变量的范围和寿命
变量的范围是程序中识别变量的部分。函数内定义的参数和变量在外部不可见。因此,它们具有局部范围。
变量的生命周期是变量在存储器中退出的时间段。函数内部变量的生命周期与函数执行的时间一样长。
一旦我们从函数返回它们就会被销毁。因此,函数不记得先前调用的变量值。
下面是一个示例,用于说明函数内部变量的范围。
In [7]
def my_func():
x = 10
print("Value inside function:",x)
x = 20
my_func()
print("Value outside function:",x)
('Value inside function:', 10)
('Value outside function:', 20)
在这里,我们可以看到x的值最初为20。即使函数my_func()将x的值更改为10,它也不会影响函数外部的值。
这是因为函数内部的变量x与外部的变量x不同(函数的本地)。尽管它们具有相同的名称,但它们是两个具有不同范围的不同变量。
另一方面,函数外部的变量从内部可见。它们具有全局范围。
我们可以从函数内部读取这些值,但不能更改(写入)它们。为了修改函数外部变量的值,必须使用关键字global将它们声明为全局变量。
参数
在上面的案例中,我们学习了定义函数并调用它。否则,函数调用将导致错误。这是一个例子。
In [8]
def greet(name,msg):
"""This function greets to
the person with the provided message"""
print("Hello",name + ', ' + msg)
greet("Monica","Good morning!")
('Hello', 'Monica, Good morning!')
这里,函数greet()有两个参数。
因为,我们用两个参数调用了这个函数,它运行顺畅,我们不会收到任何错误。
如果我们用不同数量的参数调用它,解释器会报错。下面是对此函数的调用,其中包含一个参数,没有参数及其各自的错误消息。
In [9]
greet("Monica")
greet()
TypeErrorTraceback (most recent call last)<ipython-input-9-7765bb020128> in <module>() ----> 1 greet("Monica") 2 3 greet() TypeError: greet() takes exactly 2 arguments (1 given)
变量函数参数
到目前为止,函数具有固定数量的参数。在Python中,还有其他方法可以定义一个可以接受可变数量参数的函数。
下面描述这种类型的三种不同形式。
Python默认参数
函数参数可以在Python中具有默认值。
我们可以使用赋值运算符(=)为参数提供默认值。这是一个例子。
In [10]
def greet(name, msg = "Good morning!"):
"""
This function greets to
the person with the
provided message.
If message is not provided,
it defaults to "Good
morning!"
"""
print("Hello",name + ', ' + msg)
greet("Kate")
greet("Bruce","How do you do?")
('Hello', 'Kate, Good morning!')
('Hello', 'Bruce, How do you do?')
在此函数中,参数名称没有默认值,在调用期间是必需的(必需)。
另一方面,参数msg的默认值为“早上好!”。因此,在通话期间它是可选的。如果提供了值,它将覆盖默认值。
函数中的任意数量的参数都可以具有默认值。但是一旦我们有一个默认参数,它右边的所有参数也必须有默认值。
这意味着,非默认参数不能遵循默认参数。例如,如果我们将上面的函数头定义为:
def greet(msg = "Good morning!", name):
我们会收到一个错误:
SyntaxError: non-default argument follows default argument
Python关键字参数
当我们调用具有某些值的函数时,这些值将根据其位置分配给参数。
例如,在上面的函数greet()中,当我们将其称为greet(“Bruce”,“how do you do?”)时,值“Bruce”被赋值给参数名称,类似地how do you do消息
Python允许使用关键字参数调用函数。当我们以这种方式调用函数时,可以更改参数的顺序(位置)。以下对上述函数的调用都是有效的,并产生相同的结果。
>>> # 2 keyword arguments
>>> greet(name = "Bruce",msg = "How do you do?")
>>> # 2 keyword arguments (out of order)
>>> greet(msg = "How do you do?",name = "Bruce")
>>> # 1 positional, 1 keyword argument
>>> greet("Bruce",msg = "How do you do?")
我们可以看到,我们可以在函数调用期间将位置参数与关键字参数混合使用。但我们必须记住,关键字参数必须遵循位置参数。
在关键字参数之后使用位置参数将导致错误。
*Python任意参数
有时,我们事先并不知道将传递给函数的参数数量.Python允许我们通过具有任意数量参数的函数调用来处理这种情况。
在函数定义中,我们在参数名称前使用星号(*)来表示这种参数。这是一个例子。
In [11]
def greet(*names):
"""This function greets all
the person in the names tuple."""
# names is a tuple with arguments
for name in names:
print("Hello",name)
greet("Monica","Luke","Steve","John")
('Hello', 'Monica')
('Hello', 'Luke')
('Hello', 'Steve')
('Hello', 'John')
在这里,我们使用多个参数调用该函数。这些参数在传递给函数之前被包装到元组中。在函数内部,我们使用for循环来检索所有参数。
Python函数: 在列表中移除重复对象
In [4]
# Python code to remove duplicate elements from list
def remove_duplicates(duplicate):
uniques = []
for num in duplicate:
if num not in uniques:
uniques.append(num)
return(uniques)
duplicate = [2, 4, 10, 20, 5, 2, 20, 4]
print(remove_duplicates(duplicate))
[2, 4, 10, 20, 5]
当你使用return语句时,另一件值得一提的事是你可以用它来返回多个值。因此,您可以使用元组。
python快速入门【四】-----各类函数创建的更多相关文章
- Python快速入门
Python快速入门 一.基础概要 命名:h.py Linux命令行运行:python h.py 注释.数字.字符串: 基本类型只有数字与字符串 #python注释是这样写的 ''' 当然也可以这样 ...
- Python快速入门PDF高清完整版免费下载|百度云盘
百度云盘:Python快速入门PDF高清完整版免费下载 提取码:w5y8 内容简介 这是一本Python快速入门书,基于Python 3.6编写.本书分为4部分,第一部分讲解Python的基础知识,对 ...
- Python爬虫入门四之Urllib库的高级用法
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
- 转 Python爬虫入门四之Urllib库的高级用法
静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...
- python快速入门及进阶
python快速入门及进阶 by 小强
- Python快速入门之与C语言异同
代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同. ...
- 1、Python快速入门(0529)
学习来自马哥教育的视频,感谢马哥 编程语言: 用户: 问题空间 计算机:解决问题 解空间 抽象: 机器代码-->微码编程-->高级语言 (语言的高下级的是根据语言是否被人类容易理解或者更接 ...
- Python快速入门教程【转】
第一章 Python基础知识 1.1 介绍 1.1.1 特点 Python是一种面向对象.解释型计算机程序设计语言.语法简洁清晰,强制用空白符作为语句缩进. Python ...
- 「数据挖掘入门系列」Python快速入门
Python环境搭建 本次入门系列将使用Python作为开发语言.要使用Python语言,我们先来搭建Python开发平台.我们将基于Python 2.7版本.以及Python的开发发行版本Anaco ...
- Python与C语言基础对比(Python快速入门)
代码较长,建议使用电脑阅读本文. 10分钟入门Python 本文中使用的是Python3 如果你曾经学过C语言,阅读此文,相信你能迅速发现这两种语言的异同,达到快速入门的目的.下面将开始介绍它们的异同 ...
随机推荐
- 开放 LLM 排行榜: 深入研究 DROP
最近,开放 LLM 排行榜 迎来了 3 个新成员: Winogrande.GSM8k 以及 DROP,它们都使用了 EleutherAI Harness 的原始实现.一眼望去,我们就会发现 DROP ...
- Zookeeper面试题总结
1.请简述Zookeeper的选举机制 假设有五台服务器组成的zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的. 假设这些服务器 ...
- Web 3.0 会是互联网的下一个时代吗?
2000 年初,只读互联网 Web 1.0 被 Web 2.0 所取代.在 Web 2.0 时代,用户摆脱了只读的困扰,可以在平台上进行互动并创作内容.而 Web 3.0 的到来,除了加密货币和区块链 ...
- AI 视频云 VS 窄带高清,谁是视频时代的宠儿
随着网络技术的逐渐改善,各类视频消息成为媒体传播的主要选择手段.但其实支撑着视频传播的并不单单是网络技术,还有视频转码与压缩技术.这类技术下分很多,比如曾经被频繁提到的 H.265,比如时下热门的窄带 ...
- Tomcat--安装&&配置文件
配置信息 centos:7.8 tomcat:7.0.3 jdk:1.8 1 部署java环境 [root@localhost ~]# tar xvf jdk-8u181-linux-x64.tar. ...
- JSP | application 对象详解 & 网站计数器实现
原作者为 RioTian@cnblogs, 本作品采用 CC 4.0 BY 进行许可,转载请注明出处. 本篇学习自:C语言中文网,部分内容转载仅供学习使用. \[QAQ \] JSP applicat ...
- 洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包
本文学习自洛谷社区 喜提CCPC2021网络赛原题 题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分.最大化k个子弹能得到的最大得分. 预处理出第 \(i\) 列 \(j\) ...
- 【每日一题】32. 比赛 (DFS / 概率DP)
补题链接:Here [方案一:DFS] 首先我们可以计算出每道题做不出来的概率 \(unsolve[i] = (1 - a[i])(1- b[i])(1 - c[i])\) 然后因为只有 12 道题, ...
- (组合游戏)SG函数与SG定理详解
有一段时间没记录知识类的博客了,这篇博客就说一下SG函数和SG定理吧 SG函数是用于解决博弈论中公平组合游戏(Impartial Combinatorial Games,ICG)问题的一种方法. 什么 ...
- 第四届蓝桥杯(2013)C/C++大学A组省赛题解
第一题:高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生 ...