首页 > 编程语言 ># Python_函数专题(一)

# Python_函数专题(一)

时间:2023-07-07 16:33:34浏览次数:37  
标签:专题 函数 Python python 参数 print hello name

目录

函数基础

基础

  • 函数的基础理论
    • 函数,即一段具有特定功能的代码块
    • 调用函数,即通过一条简单的命令执行一系统复杂的操作,小括号本身是不能省略的
    • 函数名,即函数的标识符,在调用的时候函数的我们要通过函数名去调用整个函数
    • 函数的参数,即在调用函数时给函数提供的数据

函数调用

函数在调用的时候必须写上函数名后面加一个括号,这是固定的写法,小括号必须得写,不能省略。

带上括号就代码括号前面的东西是一个函数,就会调用这个函数所对应的功能,如下所示:

x = x = "input"
y = input()

通过input括号后面的括号就能很清楚的时候,第二个行的input一个函数,就会调用input函数所对应的代码片段;第一行的input因为没有括号,input就是普通的字符串而已,不会调用任何函数代码片段。

参数

并不是所有的函数都需要参数,有的函数必须携带参数,有的函数不需要携带参数函数是否要有参数,是函数本身的功能决定的:

# 我们以下面这段代码来解释一下
name = ["zhangsan","lisi","wanger"]
name.append("lucifer")
print(name)
name.clear()
print(name)

在上述代码当中,clear()和apped()都是函数,一个有参数,一个没参数,也就是说并不是所有的函数都必须携带参数。那为什么clear就不需要任何的参数?而是apped()后面必须要写参数呢?apped()函数后面如果不写函数python解释器就会报错,apped的作用是在原有的列表当中追加内容,如果apped不带参数,那追加什么呀?那apped就没有意义了!所以apped由于其功能的影响必须要加参数,而是clear函数的作用本身就是清空函数,既然都要清空了,那就没有必要再写参数了!举个小例子,两军对垒时,如果一方已经决定投降,那它就没有必要再去再向前面运送大量的物资,就像clear函数,既然都已经决定要清空了,那带携带个锤子参数!

有的函数可以携带多个参数,是否携带多个参数,也是由函数本身决定的

我们前面知道了有的函数必须携带参数,有的函数不需要携带参数,我们这里要说的是有的函数还可以携带多个参数,比如print函数

print("zhangsan","zs","lisi")

我们在使用函数的时候本身就是使用它可以将前面打印到前台的功能,自然是希望它不仅仅只能打印一个参数,print的函数在设计的时候就已经考虑到这一点。

返回值

并不是每个函数都有返回值

# print函数有返回值,而clear()函数就没有返回值
name = ["zhangsan","lisi"]
print(name)
name.clear()

clear本就是清空,就根据不需要返回值!而apped这个函数,直接追加内容到列表,就直接追加进去了,也没有返回值。

有返回值的函数,我们可以直接让其参与运算,如下所示:

# 我们可以直接让len()函数去参与运算
name = ["zhangsan","lisi"]
count = len(name) + 10
print(count)

如果没有返回值,强制通过变量承接,就是直接返回None,代表没有值,比如:

a = print("zhangsan")
print(a)

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
zhangsan
None

变量承接

有的函数需要变量去承接,而有的函数不需要,到底是否需要要看函数是否有返回值

比如print函数,我们使用print函数本身就是希望它打印到前台的功能,所以我们极少能看看到XX = print()这样的写法,我们就是要将其打印到前台,为什么用变量承接,实在没必要。

# 而有的函数,带有返回值,必须需要变量去承接,否则它就没有意义,比如
name = ["zhangsan","lisi"]
# len(name)
count = len(name)
print(count)

我们可以len函数去计算列表当中有多少个值,当我们计算出来之后,是有一个返回值的,我们接下来是要进行使用的,如果你仅仅写len(name)这并有任何的意义。

# 有的函数,没有返回值,那就不需要变量去承接,比如clear()
name = ["zhangsan","lisi"]
print(name)
name.clear()
print(name)

clear本来就是要去清空的,它没有返回值,我们也不需要它的返回值,所以就不需要通过变量去承接。

print

print("hello","world","!")
print("hello","world","!",sep="*")
# 默认情况下,print后面会加一个换行,所以一个不带参数的print,有空行的效果
print()
print("******************")
print("hello","world","!",sep="*",end="\n")
print("hello","world","!",sep="*",end="|")
print("hello","world","!",sep="*",end="|\n")

# 获取len函数的名字,注意len后面没有加括号,也就是我们我们没有调用它
# 仅仅想看一下它的函数名字
print(len.__name__)
print(input.__name__)

定义函数

image-20230707162204262

定义函数的格式

如下所示,这就是一个函数的格式,def必须得写,你在调用函数的时候必须得带一个括号,而在定义的时候这个括号同样不能省略,后面最后还要有一个冒号。

# 函数头的格式def 函数的名字():
# 函数如果不被调用是不会执行的!
def say_hi():
	# 函数体,必须缩进
	print("hello")

# 调用函数
say_hi()
"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello

PS:函数必须得放在调用的前面才行!原因是整个代码是从上到下依次加载到内存当中,如上所示,在执行的时候需要从上到下先将函数主体加载到内存当中,但这时候没有执行,只能等到say_hi()函数开始调用时,才开始行内存当中的函数,但如果你不把函数主体放在前面,那内存当中就没有此函数主体,在调用时就会报错函数无法找到!如下所示:

NameError: name 'say_hi' is not defined

PS:系统给我们提供的函数在python启动的时候就已经加载到内存当中了,所以可以在python的任意地方进行调用!比如print函数。

函数嵌套

我们先阅读以下代码:

def say_hi():
	print("hello!")

def good_morning():
	print("hello!")
	print("good morning!")

good_morning()
"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello!
good morning!

我们本来在say_hi函数当中打印了hello,然后我们又在good morning函数当中又打印了hello,也就是说hello已经重复了,既然第一个函数当中已经完成了hello的打印,我们在第二个函数当中完全就可以进行调用了,如下所示:

def say_hi():
	print("hello!")

def good_morning():
	# 在函数体当中直接调用另一个函数的功能
	say_hi()
	print("good morning!")

good_morning()
"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello!
good morning!

在定义函数的时候,如果存在函数之间的嵌套,那相互之间并不会存在所谓的先后顺序,因为虽然内存是向下向下加载代码,但是加载完成之后如果不不被调用,那就不会执行,不会执行就不会报错,只有当函数被调用的时候才会去内存当中查找,如下所示,函数的嵌套的顺序没有严格的限制。

def good_morning():
	say_hi()
	print("good morning!")

def say_hi():
	print("hello!")

good_morning()
"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello!
good morning!

函数调用死循环

即两个函数相互调用,如下所示,所以一定要避免

def good_morning():
	say_hi()
	print("good morning!")

def say_hi():
	good_morning()
	print("hello!")

good_morning()

函数参数

image-20230707162212619

单参数

参数的作用是为函数提供数据的!先看这段代码

def line():
	print("---")

print("hello")
line()
print("goog")

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello
---
goog

如上所示,我们写了一个函数line,里面有三个横杠,我们在调用经函数的时候自然也会出现三个横杠!

但是我们希望我们能通过在line函数的后面自己写一个参数,我们自定义横杠的数量,如下所示:

# width是我们随便写的字符,就是宽度的意思
def line(width):
	print("-" * width)

print("hello")
line(4)
print("goog")

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello
----
goog

双参数

如下所示,我们给函数提供两个参数,一个是长度,另一个使用什么字符,如下所示:

def line(width,char):
	print(char * width)

print("hello")
line(7,"@")
print("goog")

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
hello
@@@@@@@
goog

报错

仔细看以下代码,我们在定义函数时指定了两个参数,但是在调用函数的时候却没给它参数或只给一个参数,这样搞就会报错,如下所示:

def line(width,char):
	print(char * width)

print("hello")
line(7)
print("goog")

# 报错
TypeError: line() missing 1 required positional argument: 'width'

也就是说:我们在使用函数的时候提供的参数与要写函数定义时候提供的参数数量要一致!

而且参数时给定的顺序也必须与函数定义的顺序是一致的,如上图所示,我们希望用户使用函数时第一个参数是长度,第二个长度才是字符,如果用户写反了!那有就有可能会出错!

指定参数类型

正常情况下,我们在变量使用函数时,会自动提示一些函数,如下所示:

image-20230707162224029

image-20230707162230130

当变量里面是数据类型不一样时,提供的函数信息也不一样,也就是pycharm其实是可以判断出name当中到底是字符串还是数字的,在定义参数的时候也会类似的情况下,如下所示:

image-20230707162236870

如上所示,在函数体say_hi当中,pycharm并不知道width到底是字符中还是数字,所以给你函数提示就很奇怪!你可以函数体当中告诉pycharm参数的类型,那它就会给你提供该数据类型对应的函数,如下所示:

image-20230707162242788

我们也可以不在函数体当中指定数据类型,在调用函数时指定,函数体依然也能感知到,如下所示:

image-20230707162248864

函数文档注释

在函数内部加上注释,在使用的时候就可以通过help、或写函数的时候看到提示,如下所示:

def line(width,char):
	'''
	画一条线
	widtch是指定宽度
	char是指定字符
	正常情况下应该这样使用:line(“*”,7)
	'''
	print(char * width)

help(line)

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
Help on function line in module __main__:

line(width, char)
    画一条线
    widtch是指定宽度
    char是指定字符
    正常情况下应该这样使用:line(“*”,7)

Process finished with exit code 0

函数返回值

Return

谈到函数当中的返回值必谈Return,return有两个作用:

  • 返回值:return的原意就是返回值,它给返回一个值给外界
  • 退出:函数体一旦遇到return,执行完return之后就会退出,不再向下执行了!

定义带有返回值的参数

def get_max(a,b):
	# 如果a大于b,v等于a,否则v就等于b
	v = a if a > b else b
	# 返回v这个值,同时结束执行,下面的print根本不会执行
	return v
	print("hello")
z = get_max(8,19)
print(z)

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
19

返回多个值

return可以返回多个值,变量承接的时候也得使用多个变量,如下所示:

def get_max(a,b):
	# 如果a大于b,v等于a,否则v就等于b
	v = a if a > b else b
	# 返回v和v+10,v+20三个值
	return v,v+10,v+20
	print("hello")

# 接入的时候也得使用三个值
z,i,t = get_max(8,19)
print(z,i,t)

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
19 29 39
  • 如果函数返了三值,外界却只有两个变量承接,会有什么现象?会报错
  • 如果函数返了三值,外界却只有一个变量承接,会有什么现象?会形成一个无组,如下所示:
def get_max(a,b):
	# 如果a大于b,v等于a,否则v就等于b
	v = a if a > b else b
	# 返回v和v+10,v+20三值
	return v,v+10,v+20
	print("hello")

# 接入的时候也得使用三个值
z= get_max(8,19)
print(z)

"C:\Program Files\Python311\python.exe" G:\python2\python编程从入门到实践\TEST2.py 
(19, 29, 39)

Process finished with exit code 0

标签:专题,函数,Python,python,参数,print,hello,name
From: https://www.cnblogs.com/yizhangheka/p/17535351.html

相关文章

  • 如何利用 Python 自动发邮件,打工人福音
    在工作中,每天或者每周结束的时候我们都会发送相应的日报或者周报给上级领导,来汇报你做了那些工作,可是汇报工作内容的时候我们始终都是打开邮箱、写入内容,发送和抄送给固定的人,那么这么繁琐并且重复的一件事,我们能不能使用程序来简化?答案是可以的,接下来我们就使用Python来操作......
  • 如何解决Shell执行python文件,传参空格引起的问题
    这篇文章给大家分享的是有关如何解决Shell执行python文件,传参空格引起的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用shell调用一个python文件,并向shell中传入参数,举例如下:p1='wang'p2='shuang'pythonpy文件$p1$p2 这种情况可以......
  • 006 学习笔记--内置函数 | 字符串函数 + 数值函数 + 日期函数 + 流程控制函数(if ifnu
    函数:是指一段可以直接被另一段程序调用的程序或代码。MySQL内置函数: 字符串函数-------------------------------mysql内置函数--字符串函数-------------------------------字符串拼接--CONCAT(str1,str2,...)selectCONCAT('I','love','you');--returnIlove......
  • 崎岖行者 js的中的函数(三)
    方法什么是js的方法?简单讲,绑定到对象的函数就是方法。this在对象的方法中,我们常常使用this关键字。this关键字代表方法所绑定的对象。varwangqiang={name:"wangqiang",age:18,city:"guangzhou",address:"tianhe",//......
  • BZOJ 1022: [SHOI2008]小约翰的游戏John SG函数 Anti−SG
    1022:[SHOI2008]小约翰的游戏JohnTimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 2667  Solved: 1701[Submit][Status][Discuss]Description小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一......
  • python 获取动态库 lib-dynload 路径
    动态库lib-dynload路径python3-c'importrandomasm;print(m.__file__)'参考;https://blog.csdn.net/jaket5219999/article/details/53512071......
  • Python报错 | RuntimeError: expected scalar type Long but found Float
    报错信息在执行nlp自定义模型的训练函数的时候,报如下错误:RuntimeError:expectedscalartypeFloatbutfoundLong错误原因错误信息指出了问题所在:模型期望的数据类型是float,但实际上传递给模型的数据类型是long。这个错误通常是由于张量数据类型不匹配引起的。在PyTo......
  • python爬虫scrapy入门教程
    背景:python实现网页爬虫,可以使用scrapy,首先,需要安装python的运行环境,我们这里使用anaconda集成环境。安装好以后,打开AnacondaNavigator,打开CMD.exePrompt,在命令行窗口运行:pipinstallscrapy,运行完,没有报错,意味着scrapy就安装好了,然后,在当前文件夹下新建一个文件,名为:myspider.p......
  • python列表
     访问方式和字符串一样有两种,一种是正向进行的,下标从0开始,另一种是反向进行的,下标从-1开始切片的语法同样适用于列表基本语法:列表名[m:n]当mn都存在时,访问所表示的元素区间但是不包括n所对应的元素当mn都不存在时,访问整个列表元素当m存在n不存在时,访问从m开始直到结尾的所......
  • Python最后一位怎么表示角标 这个问题怎么解决?
    解决问题:查找列表中特定元素的最后一位角标在Python中,我们可以使用不同的方法来查找列表中特定元素的最后一位角标。下面将介绍三种常用的方法:使用enumerate()函数,使用len()函数和列表切片。方法一:使用enumerate()函数enumerate()函数可以同时返回列表的元素和对应的角标。我们......