首页 > 其他分享 >2-2 函数基础(参数、返回值)

2-2 函数基础(参数、返回值)

时间:2023-11-25 12:22:05浏览次数:32  
标签:函数 a1 a2 参数 func print 返回值 def

 大纲:

  • 初识函数

  • 函数的参数

  • 函数的返回值

 

 

1. 初识函数

函数到底是个什么东西?

函数,可以当做是一大堆功能代码的集合。

def 函数名():
    函数内编写代码
    ...
    ...
    
函数名()
 

例如:

# 定义名字叫info的函数
def info():
    print("第一行")
    print("第二行")
    print("第n行...")
    
info()

 

什么时候会用到函数?

什么时候会用到函数呢?一般在项目开发中有会有两种应用场景:

  • 有重复代码,用函数增加代码的重用性。

    def send_email():
        # 10行代码
    ​
    print("欢迎使用计算机监控系统")
    if CPU占用率 > 90%:
        send_email()
    ​
    if 硬盘使用率 > 99%:
        send_email()
        
    if 内存使用率 > 98%:
        send_email()
    ...

     

  • 代码太长,用函数增强代码的可读性。

    def calculate_same_num_rule():
        """判断是否是豹子"""
        pass
    ​
    def calculate_same_color_rule():
        """判断是否是同花"""
        pass
    ​
    def calculate_straight_rule():
        """判断是否顺子"""
        pass
    ​
    def calculate_double_card_rule(poke_list):
        """判断是否对子"""
        pass
    ​
    def calculate_single_card_rule():
        """判断是否单牌"""
        pass
    ​
    ​
    ​
    # 1. 生成一副扑克牌
    card_color_list = ["红桃", "黑桃", "方片", "梅花"]
    card_nums = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]  # A
    all_card_list = [[color, num] for color in card_color_list for num in card_nums]
    ​
    # 2.洗牌
    random.shuffle(all_card_list)
    ​
    # 3.给玩家发牌
    ...
    # 4.判断牌是:豹子?同花顺?顺子?对子?单点?
    ​
    calculate_same_num_rule()
    calculate_same_color_rule()
    calculate_straight_rule()
    ...
    ​

我们是按照逻辑从上到下逐步完成,称为:面向过程编程;现在学了函数之后,利用函数编程称为:函数式编程。

 

2. 函数的参数

 

2.1 参数

在定义函数时,如果在括号中添加变量,我们称它为函数的形式参数:

# ###### 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参) #####
def func(a1,a2,a3):
    print(a1+a2+a3)

# 执行函数并传入参数(执行函数传值时一般称为实际参数-实参)
func(11,22,33)

# 执行函数并传入参数
func(9,2,103)
  • 位置传参

    def add(n1,n2):
        print(n1+n2)
        
    add(1,22)

     

  • 关键字传参

    def add(n1,n2):
        print(n1+n2)
        
    add(n1=1,n2=22)

     

 

"""
1. 形参
2. 实参
3. 位置传参
4. 关键字传参
"""


# ###### 定义有三个参数的函数(a1/a2/a3一般称为形式参数-形参) #####
def func(a1, a2, a3):
    print(a1 + a2 + a3)
# 执行函数并传入参数(执行函数传值时一般称为实际参数-实参)
func(11, 22, 33)

# 执行函数并传入参数
func(9, 2, 103)

# 执行函数
func(a1=99, a2=88, a3=1)
func(a1=99, a3=1, a2=88)

 

2.2 默认参数

def func(a1, a2, a3=10):
    print(a1 + a2 + a3)


# 位置传参
func(8, 19)
func(1, 2, 99)

# 关键字传参(位置和关键混合时,关键字传参要在后面)
func(12, 9, a3=90)
func(12, a2=9, a3=90)
func(a1=12, a2=9, a3=90)
file_object = open("xxx.txt")

 

2.3 动态参数

  • *

    def func(*args):
        print(args) # 元组类型 (22,)   (22,33,99,) ()
    
    # 只能按照位置传参
    func(22)
    func(22,33)
    func(22,33,99)
    func()

     

  • **

    def func(**kwargs):
        print(kwargs) # 字典类型 {"n1":"ayden"}    {"n1":"ayden","age":"18","email":"xxxx"}  {}
        
    # 只能按关键字传参
    func(n1="ayden")
    func(n1="adyen",age=18)
    func(n1="adyen",age=18,email="[email protected]")

     

  • *,**

    def func(*args,**kwargs):
        print(args,kwargs) # (22,33,99) {}
    
    func(22,33,99)
    func(n1="ayden",age=18)
    func(22,33,99,n1="ayden",age=18)
    func()

    提示:字符串格式化时的format功能。

    v1 = "我叫{},今年{},性别{}".format("ayden",18,"男")
    
    v2 = "我叫{name},今年{age},性别{gender}".format(name="adyen",age=18,gender="男")

     

注意事项

# 1. ** 必须放在 * 的后面
def func1(*args, **kwargs):
    print(args, **kwargs)
# 2. 参数和动态参数混合时,动态参数只能放在最后。
def func2(a1, a2, a3, *args, **kwargs):
    print(a1, a2, a3, args, **kwargs)
# 3. 默认值参数和动态参数同时存在
def func3(a1, a2, a3, a4=10, *args, a5=20, **kwargs):
    print(a1, a2, a3, a4, a5, args, kwargs)


func3(11, 22, 33, 44, 55, 66, 77, a5=10, a10=123)

 

3. 函数返回值

我们希望函数可以帮助我们实现某个功能,但让函数实现某功能之后有时也需要有一些结果需要反馈给我们,例如:

import requests
from xml.etree import ElementTree as ET


def xml_to_list(city):
    data_list = []
    url = "http://ws.webxml.com.cn//WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName={}".format(city)
    res = requests.get(url=url)
    root = ET.XML(res.text)
    for node in root:
        data_list.append(node.text)
    return data_list


result = xml_to_list("北京")
print(result)
def func():
    return 666

res = func()
print(res) # 666
def magic(num):
    result = num + 1000
    return result

data = magic(9)
print(data) # 1009

 

在了解了返回值的基本使用之后,接下来有3个关键知识:

  • 返回值可以是任意类型,如果函数中没写return,则默认返回None

    def func():
        return [1,True,(11,22,33)]
    
    result = func()
    print(result)
    def func():
        value = 1 + 1
        
    ret = func()
    print(ret) # None

     

    当在函数中未写返回值returnreturn None ,执行函数获取的返回值都是None。

    def func():
        value = 1 + 1
        return  # 或 return None
    
    ret = func()
    print(ret) # None

     

  • return后面的值如果有逗号,则默认会将返回值转换成元组再返回。

    def func():
        return 1,2,3
    
    value = func()
    print(value) # (1,2,3)

     

  • 函数一旦遇到return就会立即退出函数(终止函数中的所有代码)

    def func():
        print(1)
        return "结束吧"
    	print(2)
        
    ret = func()
    print(ret)
    def func():
        print(1)
        for i in range(10):
            print(i)
            return 999
    	print(2)
        
    result = func()
    print(result)
    
    # 输出
    1
    0
    999
    def func():
        print(1)
        for i in range(10):
            print(i)
            for j in range(100):
                print(j)
    	        return
    	print(2)
        
    result = func()
    print(result)
    
    # 输出
    1
    0
    0
    None

     

总结

  1. 如何定义一个函数?

  2. 函数名的规范。(同变量名规范)

    • 规范

    • 建议

      def change_num():
          pass
  3. 函数的注释,说明函数的作用。

    def encrypt(origin):
        """ 用于数据加密和xxx """
    	pass
  4. 定义函数时,参数一般有以下情况(形式参数)

    • 情景1

      def func(a1,a2):
          pass
    • 情景2:

      def func(a1,a2=123):
          pass
    • 情景2:

      def func(*args,**kwargs):
          pass
  5. 函数的返回值,一般用于将函数执行的返回给调用者。

    • 默认返回None

    • 遇到return则函数执行完毕

 

标签:函数,a1,a2,参数,func,print,返回值,def
From: https://www.cnblogs.com/zhengyongwu/p/17855388.html

相关文章

  • 前端原型和原型链构造函数的使用
    目录前言导语代码部分运行结果前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷导语前端原型和原型......
  • 前端学习笔记202307学习笔记第六十七天-前端面试-箭头函数的基本使用1
      ......
  • 前端学习笔记202307学习笔记第六十七天-前端面试-箭头函数的注意点
    ......
  • 十进制转36进制函数
    十进制转36进制函数(0~9,A~Z) createfunction[dbo].ufn_int2str36(@valueint)returnsvarchar(20)asbegin--转数字为36进制(数字+大写字母)的字符串--declare@valueint--set@value=99999999DECLARE@radixintset@radix=36DECLA......
  • 无涯教程-Tk - Bitmap部件函数
    位图小部件用于将位图添加到画布。位图小部件的语法如下所示-canvasNamecreatebitmapxyoptionsx和y设置位图的位置-Bitmap-参数下表在下面列出了可用于位图小部件的选项-Sr.No.Syntax&Remark1-anchorposition位图将相对于x和y位置定位。中心默认为默认值,其他......
  • 无涯教程-Tk - Polygon部件函数
    多边形小部件用于在画布中绘制多边形。多边形小部件的语法如下所示-canvasNamecreatepolygonx1y1x2y2...xnynoptionsx1y1和x2y2...xnyn用于确定多边形的端点。Polygon-参数下表列出了可用于多边形小部件的选项-Sr.No.Syntax&Remark1-outlinecolor......
  • Hive学习路线-自定义函数
    九、自定义函数1.查看系统提供的函数列表showfunctions;2.查看具体某一个函数的描述信息descfunction[extended]函数名称;3.自定义函数Userdefinedfunction/UDF3.1创建一个java项目,导入hive的libs3.2创建类,继承org.apache.hadoop.hive......
  • 垃圾回收过程可设置的参数
    1内存分代垃圾回收主要是在堆没有足够的内存空间来存放新创建的对象时被触发。由于堆中的对象生命周期不同,故在进行垃圾回收时,不是所有对象都需要被回收,只是回收不再可达的对象。同时在进行垃圾回收时需要暂停应用程序,故会造成应用在暂停期间不可用,垃圾回收持续的时间越长,则应用不......
  • 无涯教程-Tk - Text部件函数
    画布文本小部件用于在画布中绘制文本。画布文本小部件的语法如下所示-canvasNamecreatetextxyoptionsx和y用于确定文本的位置-Text-参数下表中列出了画布文本小部件可用的选项-Sr.No.Syntax&Remark1-anchorposition文本将相对于x和y位置定位。中心是默认设置......
  • 【C++ Primer Plus】类、运算符重载、虚函数、友元函数模板
    1.运算符重载1.1普通运算符重载在类内重写operator+函数,实现加号运算符的重载,下面给出了两种调用方式,注意加号前为调用者,加号后为参数,第三行代码的完整写法实际上是第四行TimeTime::operator+(intminutes)const;Timetime;Timetime2=time+50;Timetime3=time.o......