• 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 – 分隔符,默认为所有的空字符,包括空格、换行( )、制表符( )等
      • num – 分割次数。默认为 -1, 即分隔所有
      • 如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。
    • splitlines()按照行(’ ’, ‘ ’, ’)分隔,返回一个包含各行作为元素的列表
    • 语法: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 
    Bad 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. 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和

     

    以上内容均属原创,如有不详或错误,敬请指出。
    
    本文作者: 坏坏
  • 相关阅读:
    ngx-push-stream模块源码学习(四)——订阅
    nginx-push-stream模块源码学习(三)——发布
    nginx-push-stream模块源码学习(二)——模块初始化
    ngx-push-stream模块源码学习(一)——序言
    微信通过网页版定时推送消息脚本
    移动硬盘 或硬盘显示需先格式化问题解决
    SQL优化方法:
    sqlserver 电脑重启以后服务突然无法启动 报错
    sql server xp_cmdshell 过程中报错原因
    .net Core 2.0应用程序发布到IIS上注意事项
  • 原文地址:https://www.cnblogs.com/bad5/p/13022660.html
Copyright © 2020-2023  润新知