Python中这些简单的函数你还不会?


定义和调用函数

定义函数

  • 格式
def functionname([parameterlist])
	["comments"]
	[funcitonbody]

functionname:函数名
parameterlist:参数。可以为空,可以为多个参数,用逗号隔开
comments:可选参数
functionbody:可选参数,语句体调用函数后要执行的功能代码

  • 函数:系统函数、自定义函数
  • 调用函数:
    • 调用函数就是执行函数
    • 系统函数、自定义函数都是用函数名来调用
  • pass空语句:不做任何事情,起到占位作用,可以用…来代替pass

自定义函数

def sum(num1,num2):
	print(num1+num2)

def printstring(str):
	print(str)

num1、num2、str都是函数的参数,在函数体中,函数类似于变量

函数调用、调用函数

  • 计算两个数相加
>>> def sum(num1,num2):
	print(num1+num2)

>>> sum(100,10)
110
>>>

参数和返回值

  • 主调函数和被调用函数之间一般都有数据传递关系
  • 参数:
    • 形参:定义函数时,括号里的参数
    • 实参:调用函数时,函数后面的参数
  • 参数的作用是传递数据给函数使用
  • 实参:
    • 值传递:实参为不可变对象时,改变形参的值,实参值不变
    • 引用传递:实参为可变对象时,改变形参的值,实参的值也会改变
  • 位置参数(必备参数)
    • 必须按照正确的顺序传递到函数中,即调用时数量和位置必须与定义的相同
  • 关键字参数:使用形参的名字来输入参数的值,不需要与形参的的位置一致

例1

>>> def fun_bmi(person,height,weight):  //定义函数
	bmi = weight/height
	print (bmi)

>>> fun_bmi("坏坏",1.78)  //参数数量与定义的不同,缺少“weight”参数
Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    fun_bmi("坏坏",1.78)
TypeError: fun_bmi() missing 1 required positional argument: 'weight'
>>> fun_bmi("坏坏",56,1.78)  //参数位置与定义不一致
0.031785714285714285
>>> >>> fun_bmi("坏坏",1.78,56)  //正确的输出
31.46067415730337
# 关键字参数,用形参的名字确定输入的参数值,指定实参时,无需与形参的位置相同
>>> fun_bmi(height=1.78,weight=56,person="坏坏")
31.46067415730337
>>> 
  • 参数传递
>>> def func(num):
	num+=1

>>> a = 10
>>> func(a)
>>> print(a)
10


  • 列表作为参数传递
>>> def sum(list):
	total=0
	for i in range(len(list)):
		print(list[i],'+',end="")
		total+=list[i]
	print('=',total)

>>> list=[15,25,35,45,55]
>>> sum(list)
15 +25 +35 +45 +55 += 175
>>> 

这里在最后的一个输出会多一个+号,可以优化

  • 字典作为参数传递
>>> def print_dict(dict):
	for (k,v) in dict.items():
		print("dict[%s]="%k,v)

		
>>> dict={"b":"bad","o":"boy","B":"Bad"}
>>> print_dict(dict)
dict[b]= bad
dict[o]= boy
dict[B]= Bad
>>>
  • 可变参数(不定参数)
    • 传入函数中的实际参数可以是0个、1个或多个
  • 可变参数的两种形式:
    • *parameter——接受任意多个实际参数并将其放到一个元组中
    • **parameter——接受任意多个显示赋值的实际参数,并将其放到一个字典中
# *parameter可变参数
>>> def printplayer(*name):
	print('我喜欢的歌手有:')
	for item in name:
		print(item)

>>> printplayer('许嵩')
我喜欢的歌手有:
许嵩
>>> printplayer('许嵩','孙子涵','owl ciy')
我喜欢的歌手有:
许嵩
孙子涵
owl ciy
>>>


>>> def printsign(**sign):
	print()
	for key,value in sign.items():
		print("["+key+"]的专辑是:"+value)

# **可变参数
>>> printsign(许嵩="寻宝游戏",孙子涵="涵剧先森",owl="Good Time")

[许嵩]的专辑是:寻宝游戏
[孙子涵]的专辑是:涵剧先森
[owl]的专辑是:Good Time
>>> 

使用已存在的列表作为函数的可变参数,在列表名称前加*
使用已存在的字典作为函数的可变参数,可在字典的名称前面加**

  • 返回值
    • 作用:将函数处理的结果返回给调用它的程序
    • 返回值不是必须的,如果没有return语句,默认返回None
  • 返回值可以是任意类型,只要return得到执行,就会直接结束函数的执行
  • 返回一个值,该值可以是任意类型
  • 返回多个值,保存为一个元组
>>> def sum(num1,num2):  #无返回值
	num1+num2

>>> print(sum(2,3))
None
>>> def sum(num1,num2):  #有返回值
	num1+num2
	return num1+num2
	
>>> print(sum(2,3))
5
>>> 

:输出一个列表中的偶数

>>> def filter_even(list):
	list1=[]
	for i in range(len(list)):
		if list[i]%2==0:
			list1.append(list[i])
			i-=1
	return list1

>>> list=[1,2,3,4,5,6,7]
>>> list2=filter_even(list)
>>> print(list2)
[2, 4, 6]
>>>

变量的作用域

  • 作用域指程序代码能够访问该变量的区域,即变量的有效范围
  • 局部变量
    • 在函数内部定义的变量,只能在函数内使用
    • 只在函数运行时创建,运行之前、之后都不存在
  • 全局变量
    • 在函数外定义的变量
    • 函数内定义,但是用global关键字修饰后的变量
    • 在定义后的任何地方都有效

如果全局变量和局部变量重名,函数体内只有局部变量有效

>>> a = 50  #定义全局变量a
>>> def setNumber():  #定义函数内为局部变量,只在函数内有效
	a=10
	print(a)

>>> setNumber()  #调用函数,输出函数内的变量值
10
>>> print(a)  #未调用函数,输出全局变量的值
50
>>> 

>>> total=5  #全局变量
>>> def sum(num1,num2):
	total=num1+num2   #函数内的为局部变量
	print ("函数内是局部变量:",total)
	return total

>>> sum(5,15)  #调用函数,输出局部变量
函数内是局部变量: 20
20
>>> print("函数外是全局变量:",total)  #未调用函数,输出全局变量
函数外是全局变量: 5
>>> 

匿名函数

  • python使用lambda来创建匿名函数
    • lambda是一个表达式,函数体比def简单
    • lambda的主体是表达式,不是代码块。仅能在lambda表达式中封装有限的逻辑
    • lambda函数拥有自己的命名空间,不能访问自有参数列表以外或全局命名空间里的参数
  • 语法:lambda[arg1[,arg2,...argn]]:expression
  • 匿名函数主要应用在需要一个函数而不必去命名这个函数
  • lambda函数看似只能写一行,却不同于C或C++的内联函数
  • 内联函数的目的是调用小函数时不占用栈内存从而增加运行效率
# 使用def定义函数
>>> def aaa(i):
	return 2+3*i

>>> aaa(5)
17
# 使用lambda定义函数
>>> d=lambda i :2+3*i
>>> d(5)
17
>>> 

>>> def add(a,b):
	return a+b

>>> add(2,3)
5
>>> e=lambda a,b :a+b
>>> e(2,3)
5
>>> 
  • lambda优势:
    • 更精简,省略定义普通函数的过程,适合写脚本
    • 提高了代码可读性
    • 替代比较抽象且调用次数不多的函数,简化命名

内置函数

数值运算函数

函数原型说明
abs()abs(x)返回x的绝对值
pow()pow(x,y)返回xy的值
round()round(x,n )返回浮点数x的四舍五入值,参数n指定保留的小数位数
divmod()divmod(a,b)返回a除以b的商和余数,返回一个元组

字符串处理函数

函数原型说明
lower()str.lower()将字符串str中的字母转换为小写字母
upper()str.upper()将字符串str中的字母转换为大写字母
swapcase()str.swapcase()将字符串str中的字母大小写互换
capitalize()str.capitalize()将字符串str中的首字母大写
title()str.title()将字符串str中的首字母大写,其余小写
ljust()str.ljust(width,[fillchar] )左对齐输出字符串str,总宽度为width,不足部分以参数fillchar填充,默认为空格
rjust()str.rjust(width,[fillchar])右对齐输出字符串str,总宽度为width,不足部分以参数fillchar填充,默认为空格
center()str.center(width,[fillchar])居中对齐输出字符串str,总宽度为width,不足部分以参数fillchar填充,默认为空格
zfill()str.zfill(width)将字符串str变成width长,并且右对齐,不足部分用0填充

  • 数学运算函数
# 计算绝对值
>>> print(abs(-5))
5
>>> print(abs(5))
5
# 计算x的y次方
>>> print(pow(2,3))
8
>>> print(pow(3,2))
9
# 计算浮点数x保留n位小数
>>> print(round(4.567,1))
4.6
>>> print(round(4.567,0))
5.0
# 计算a除以b的商和余数,返回元组
>>> print(divmod(10,3))
(3, 1)
>>> print(divmod(16,3))
(5, 1)
>>> 
  • 字符串处理函数
>>> str1 = "i am bad boy"
>>> str2 = "I AM BAD BOY"
>>> str3 = "I Am Bad Boy"
>>> str4 = "i am Bad Boy"
# 将字母转换为小写
>>> print(str2.lower())
i am bad boy
>>> str2  #变量的值不会改变
'I AM BAD BOY'
# 将字母全部转换为小写
>>> print(str1.upper())
I AM BAD BOY
# 将字母的大小写互换
>>> print(str3.swapcase())
i aM bAD bOY
# 字符串中的首字母大写
>>> print(str1.capitalize())
I am bad boy
# 将字符串中的首字母大写(每个)
>>> print(str4.title())
I Am Bad Boy
>>> 


>>> str="i am bad boy"
# 字符串居左对齐,长度为20,不足部分用*补齐
>>> print(str.ljust(20,"*"))
i am bad boy********
# 字符串居右对齐,长度为20,不足部分用+补齐
>>> print(str.rjust(20,"+"))
++++++++i am bad boy
# 字符串居中对齐,长度为20,不足部分用-补齐
>>> print(str.center(20,"-"))
----i am bad boy----
# # 字符串居右对齐,长度为20,不足部分由0补充
>>> print(str.zfill(20))
00000000i am bad boy
>>> 

拓展

  • split() 通过指定分隔符对字符串进行切片
  • 语法:str.split(str="", num=string.count(str))
    • str – 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等
    • num – 分割次数。默认为 -1, 即分隔所有
    • 如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。
  • splitlines()按照行(’\r’, ‘\r\n’, \n’)分隔,返回一个包含各行作为元素的列表
  • 语法:str.splitlines([keepends])
    • keepends – 在输出结果里是否去掉换行符
    • 默认False,不包含换行符
    • True则保留换行符
  • join()将序列中的元素以指定的字符连接生成一个新的字符串
  • 语法:str.join(sequence)
    • sequence – 要连接的元素序列
# 以空格为分隔符,将字符串分割
>>> str1="i am Bad boy"
>>> list1=str1.split(" ")
>>> print(list1)
['i', 'am', 'Bad', 'boy']
# 去除换行,将字符串一行输出
>>> str1="I am \nBad boy"
>>> print(str1)
I am 
Bad boy
>>> list1=str.splitlines()
>>> print(list1)
['i am bad boy']
# 以*连接list1中的元素
>>> list1=["I","Am","Bad","boy"]
>>> str1="*"
>>> print(str1.join(list1))
I*Am*Bad*boy
>>> 

其他常用内置函数

help()

  • 查看命令帮助手册
>>> help()  #进入命令查询
...
help> print  #查询命令帮助
...
help> quit  #退出
...
>>> help(list)  #查看命令帮助手册
双击就可以查看命令帮助手册
>>> 

type()

  • 查看变量类型
>>> a="555"
>>> print(type(a))
<class 'str'>  #字符串
>>> b=555
>>> print(type(b))
<class 'int'>  #整型
>>> c=["b","a","d"]
>>> print(type(c))
<class 'list'>  #列表

作业练习:答案参考【GitHub】

  1. 定义一个getMax( )函数,返回三个数(从键盘输入的整数)中的最大值
  2. 定义一个函数,判断输入的三个数字是否能够构成三角形的三条边
  3. 定义一个函数,求两个正整数的最小公倍数
  4. 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和

以上内容均属原创,如有不详或错误,敬请指出。
本文作者: 坏坏
  • 25
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏坏-5

谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值