Python 您所在的位置:网站首页 recvfrom函数返回值为-1 Python

Python

2023-01-21 23:53| 来源: 网络整理| 查看: 265

1.函数参数和返回值的作用

函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4种 组合形式

a.无参数,无返回值

b.无参数,有返回值

c.有参数,无返回值

d.有参数,有返回值

定义函数时,是否接收参数,或者是否返回结果,是根据 实际的功能需求 来决定的!

如果函数 内部处理的数据不确定,就可以将外界的数据以参数传递到函数内部

如果希望一个函数 执行完毕后,向外界汇报执行结果,就可以增加函数的返回值

2.函数返回值进阶

在程序开发中,有时候,会希望 一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理

返回值 是函数 完成工作后,最后 给调用者的 一个结果

在函数中使用return关键字可以返回结果

调用函数一方,可以 使用变量 来 接收 函数的返回结果

一个函数执行后可以返回多个结果

def measure(): """测量温度和湿度""" print("测量开始...") temp = 39 wetness = 50 print("测量结束...") # 元组 -可以包含多个数据,因此可以使用元组让函数一次返回多个值 # 如果函数返回的类型是元组,小括号可以省略 # return (temp,wetness) return temp,wetness # 元组 result = measure() print(result) # 需要单独的处理温度和湿度 - 但不方便 print(result[0]) print(result[1]) # 如果函数返回的类型是元组,同时希望单独的处理元组中的元素 # 可以使用多个变量,一次接收函数的返回结果 # 注意:使用多个变量接收结果时,变量的个数应该和元组中元素的个数保持一致 gl_temp, gl_wetness = measure() print(gl_temp) print(gl_wetness) 3.面试题--交换两个数字

题目要求

a.有两个整数变量 a = 6, b = 100

b.不使用其他变量,交换两个变量的值

a = 6 b = 100 # 解法1:-使用其他变量 # c = a # a = b # b = c # 解法2:-不使用其他变量 # a = a + b # b = a - b # a = a - b # 解法3: -python专有 # a, b = (b,a) # 等号右边是一个元组,只是把小括号省略了 a, b = b, a print(a) print(b) 4.函数的参数进阶 4.1不可变和可变的参数 问题1

在函数内部,针对参数使用 赋值语句,不会影响调用函数时传递的 实参变量

无论传递的参数是 可变 还是 不可变,只要 针对参数 使用 赋值语句,会在 函数内部 修改 局部变量的引用,不会影响到 外部变量的引用

dedef demo(num,num_list): print('函数内部的代码') # 在函数内部,针对参数使用赋值语句,不会修改到外部的实参变量 num = 100 num_list = [1, 2, 3] print(num) print(num_list ) print("函数执行完成") gl_num = 99 gl_list = [4, 5, 6] demo(gl_num, gl_list) print(gl_num) print(gl_list)f demo(num,num_list): print('函数内部的代码') # 在函数内部,针对参数使用赋值语句,不会修改到外部的实参变量 num = 100 num_list = [1, 2, 3] print(num) print(num_list ) print("函数执行完成") gl_num = 99 gl_list = [4, 5, 6] demo(gl_num, gl_list) print(gl_num) print(gl_list) 问题2

如果传递的参数是 可变类型,在函数内部,使用 方法 修改了数据的内容,同样会影响到外部的数据

def demo(num_list): print("函数内部的代码") # 使用方法修改列表的内容 num_list.append(9) print(num_list ) print("函数执行完成") gl_list = [1, 2, 3] demo(gl_list) print(gl_list) 面试题--+=

在python中,列表变量调用+=本质上是在执行列表变量的extend方法,不会修改变量的引用

def demo(num, num_list): print("函数开始") # num = num + num num += num # 列表变量使用+=不会做相加再赋值的操作! # num_list = num_list + num_list # 本质上是在调用列表的extend方法 num_list += num_list # num_list.extend(num_list ) print(num) print(num_list) print("函数完成") gl_num = 9 gl_list = [1, 2, 3] demo(gl_num, gl_list) print(gl_num) print(gl_list) 4.2缺省参数

定义函数时,可以给 某个参数 指定一个默认值,具有 默认值的参数 就叫做 缺省参数

调用函数时,如果没有传入 缺省参数 的值,则在函数内部使用定义函数时指定的 参数默认值

函数的缺省参数,将常见的值设置为参数的缺省值,从而简化函数的调用

gl_list = [6, 3, 9] # 默认按照升序排列 - 可能会更多! # gl_list.sort() # 如果需要降序排序,需要执行reverse参数 gl_list.sort(reverse=True) print(gl_list) 4.2.1指定函数的缺省参数

在参数后使用赋值语句,可以指定参数的缺省值

def print_info(name, gender=True ): """ :param name: 班上同学的姓名 :param gender: True 男生 False女生 """ gender_text = "男生" if not gender: gender_text = "女生" print("%s 是 %s" % (name, gender_text)) # 假设班上的同学,男生居多! # 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值 print_info("小明") print_info("老王") print_info("小美", False)

提示

缺省参数,需要使用 最常见的值 作为默认值

如果一个参数的值 不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递!

4.2.2缺省参数的注意事项 缺省参数的定义位置

必须保证 带有默认值的缺省参数 在参数列表末尾,所以,以下定义是错误的!

def print_info(name, gender=True,title) 调用带有多个缺省参数的函数

在 调用函数 时,如果 有多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系!

def print_info(name, title="", gender=True): """ :param title: 职位 :param name: 班上同学的姓名 :param gender: True 男生 False女生 """ gender_text = "男生" if not gender: gender_text = "女生" print("[%s]%s 是 %s" % (title, name, gender_text)) # 假设班上的同学,男生居多! # 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值 print_info("小明") print_info("老王") print_info("小美",gender=False) 4.3多值参数 4.3.1定义支持多值参数的函数

有时可能需要 一个函数 能够处理的参数 个数 是不确定的,这个时候,就可以使用 多值函数

python中有 两种 多值参数:

参数名前增加一个*可以接收 元组

参数名前增加两个*可以接收 字典

一般在给多值参数命名时,习惯使用以下两个名字

*args--存放 元组 参数,前面有一个*

**kwargs--存放 字典 参数,前面有两个*

args是arguments的缩写,有变量的含义

kw是keyword的缩写,kwargs可以记忆 键值对参数

def demo(num, *nums, **person): print(num) print(nums) print(person) # demo(1) demo(1, 2, 3, 4, 5, name="小明",age=18)

提示:多值参数 的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于我们能够读懂大牛的代码

4.3.2多值参数案例--计算任意多个数字的和

需求:

a.定义一个函数sum_numbers,可以接收的 任意多个整数

b.功能要求:将传递的 所有数字累加 并且返回累加结果

注意:两种方法的区别

# 利用多值参数 def sum_numbers(*args): num = 0 print(args) # 循环遍历 for n in args: num += n return num result = sum_numbers(1, 2, 3, 4, 5) print(result) # 利用元组 def sum_numbers(args): num = 0 print(args) # 循环遍历 for n in args: num += n return num result = sum_numbers((1, 2, 3, 4, 5)) print(result) 4.3.3元组和字典的拆包

在调用带有多值参数的函数时,如果希望:

将一个 元组变量,直接传递给args

将一个 字典变量,直接传递给kwargs

就可以使用 拆包,简化参数的传递,拆包 的方式是:

在 元组变量前,增加 一个*

在 字典变量前,增加 两个*

def demo(*args, **kwargs): print(args) print(kwargs) # 元组变量/字典变量 gl_nums = {1, 2, 3} gl_dict = {"name": "小明", "age": 18} # demo(gl_nums ,gl_dict) # 拆包语法,简化元组变量和字典变量的传递 # demo(*gl_nums, **gl_dict) demo(1, 2, 3, name="小明", age=18)

代码见:https://github.com/x45w/python_hanshucanshu_fanhuizhi.git

内容总结于:https://space.bilibili.com/37974444



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有