百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python编程:函数

off999 2024-12-04 14:40 24 浏览 0 评论

函数的作用

  • 功能性
  • 隐藏细节:无论函数内部写得如何复杂,你只需要传两个参数,他返回你结果
  • 避免编写重复代码


认识函数

  • 查看內置函數功能和作用,使用help,比如:help(print)
help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.


函数的定义及运行特点

函数基本结构

  • def 定义函数
  • 參數可以沒有
  • return value none (可以返回调用结果return或yield,也可以不返回默认return None)
def funcname(parameter_list):
    """  Docstring 文档字符串说明函数的作用  """
    函数体
    return 

def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def语句才会创建一个新的函数对象,并赋予其名字。

Python不用考虑输入的数据类型,而是将其交给具体的代码去判断执行,同样的一个函数,可以同时应用在整型/列表/字符串等的操作中。

在编程语言中,这种行为被称为多态。这也是Python和其他函数,比如java/C等很大的一个不同点。Python这种方便的特性,在在实际使用中也会带来诸多问题。因此,必要时需要在开头加上数据的类型检查。


调用函数

  • python顺序,先定义再调用
def print(code):
    print(code)

print("code")

输出:
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

[上一行重复了 996 次以上]
递归错误:超过最大递归深度


无限递归

  • 不用內置函數和变量,容易无限递归
def print_code(code):
    print(code)

print_code("code")
code


  • sys.setrecursionlimit()方法用于将Python解释器堆栈的最大深度设置为所需的限制。此限制可防止任何程序进入无限递归,否则无限递归将导致C堆栈溢出并使Python崩溃。
imort sys
sys.setrecursionlimit(10)

def print(code):
    print(code)

print("code")


return

  • return 后面的代码是不会执行的
def print_code(code):
    print(code)
    return
    print(code)
    print(code)
    print(code)
    
print_code("code")
code


  • 别的语言会去指定返回值的类型,python不需要
int def print_code(code): 
				print(code) return


  • 返回多个值,返回的值写法
def print_code(codea, codeb):
    codea = codea + 1
    codeb = codeb + 1
    return codea, codeb

print(type(print_code(1, 2)))
<class 'tuple'>


  • 提取值的方式
    • []索引
    • 序列解包:有意义的变量名称来接收结果,容易知道是什么意思
code = print_code(1, 2)
print(code[0],code[1])

codea, codeb = print_code(1, 2)
print(codea, codeb)
2 3
2 3


序列解包与链式赋值

a = 1
b = 2
c = 3
print(a, b, c)

a, b, c = 1, 2, 3
print(a, b, c)
1 2 3
1 2 3


d = 1, 2, 3
print(d)
print(type(d))  # 序列
(1, 2, 3)
<class 'tuple'>


a, b, c = d
print(a, b, c)
1 2 3


# 链式赋值
a, b, c = 1, 1, 1
a = b = c = 1 
print(a, b, c)
1 1 1


参数相关

必选参数

def add(x, y):   #必须赋值 (形式参数)       
  return x + y       

     
add(1, 2)#实际参数  
3


默认参数

  • 定义和调用,必选参数放前面,默认参数放后面
  • 必选参数需按照顺序对应传参,关键字可以不按照顺序传参
  • 可以不传参
  • 意义:代码的可读性
def add(x, y=1):
    return x + y

print(add(x=2))
3


def student_info(name, school="xx中学", age="10"):
    print(name)
    print(school)
    print(age)
    
student_info(name="张三", school="xx中学",age="10")
print("----------------------------")
student_info(name="张三")
张三
xx中学
10
----------------------------
张三
xx中学
10


可变参数

def print(self, *args, sep=' ', end='\n', file=None): 
    pass


  • 多个参数传参使用 [] () 集合方式进行传参,python会自己把多个实参转变为元组
def demo(param):
    print(param)
    print(type(param))
    
demo((1, 2, 3, 4))
(1, 2, 3, 4)
<class 'tuple'>


def demo(*param):
    print(param)
    print(type(param))
    
demo(1, 2, 3, 4)
(1, 2, 3, 4)
<class 'tuple'>


demo((1, 2, 3, 4))  # 二维元组
((1, 2, 3, 4),)
<class 'tuple'>


  • 二维元组可以使用 * 把元素拿出来,传进可变参数里去
demo(*(5, 6, 7, 8))
(5, 6, 7, 8)
<class 'tuple'>


  • 可以和必选参数,默认参数 一起使用
def demo(param1, param2=2, *param):
    print("param1 : ", param1)
    print("param2 : ", param2)
    print("param : ", param)


demo(1, 3, 4, 6)
param1 :  1
param2 :  3
param :  (4, 6)


def demo(param1, *param, param2=2):
    print("param1 : ", param1)
    print("param : ", param)
    print("param2 : ", param2)


demo(1, 2, 3, 4)
param1 :  1
param :  (2, 3, 4)
param2 :  2


demo(1, 2, 3, param2=4)
param1 :  1
param :  (2, 3)
param2 :  4


关键字参数

def city_temp(**param):
    for k, v in param.items():
        print(f"{k} : {v}")
        
 
city_temp(bj="12℃",sz="32℃")
bj : 12℃
sz : 32℃
c = {"北京": "12℃", "深圳": "32℃"}
city_temp(**c)
北京 : 12℃
深圳 : 32℃


作用域相关

变量作用域

  • python没有块级作用域
    if else for while 循环代码块,是没办法形成一个块级作用域
    函数可以形成一个作用域,所以它可以引用
c = 10  # 全局变量 

def add(x, y):
    c = x + y  # 函数里面定义的叫做局部变量
    print("add_c : ", c)
    
    for i in range(1):  
        print("for_c : ", c)  # 看是相对谁的局部变量,是有相对性的
        for_x = 100
        
    print("for_x : ", for_x)  
    
add(1, 2)

print("c : ", c)
add_c :  3
for_c :  3
for_x :  100
c :  10


作用域链

c = 1
def fun1():
    # c = 2
    def fun2():
        # c = 3
        print(c)  # 优先使用局部变量  ,逐级寻找才叫作用域链,for不是,因为for都没有形成作用域
    fun2()
fun1()
1


global关键字

  • 函数内部定义一个局部变量,但是在外部又想使用 机制 global
  • 全部变量在整个程序都是使用的,可以使用impoert用于别的模块,不单是这个模块


嵌套函数

  • Python函数的另一个特性,是Python支持函数的嵌套。所谓的函数嵌套,就是指函数里面有函数。
def f1():
    print("hello")
    def f2():
        print("world")
    f2()
    
# 调用f1
f1()
hello
world

相关推荐

win10打开设置快捷键(win10打开设置快捷键是什么)

1、首先打开电脑,在任务栏的语言地方点击一下再点击语言首选项。2、然后在新的界面里点击选择左侧“高级设置”按钮。3、之后在新的界面里点击选择“更改语言栏热键”按钮。4、然后在新的界面里点击选择“更改热...

flash插件下载手机版下载安装

华为手机的最新系统版本已经不再支持FlashPlayer,这是由于Adobe已于2020年底停止更新和支持FlashPlayer。因此,如果您使用最新的华为手机系统,可能无法安装和使用Flash...

官方应用商店下载(小米官方应用商店下载)

1.审核和验证:应用商店会对应用进行审核和验证,确保其质量和可靠性。开发者需要满足一定的要求才能在应用商店上架应用。而官网下载的应用没有经过此类审核和验证,因此用户需要自行评估其质量和可信度。2....

主题软件免费(主题软件免费推荐)

下载主题方法:一、打开手机找到APPStore应用软件,二、点击进去在下面找到有个搜索,点击它查找主题壁纸,三、弹出来很多主题壁纸,根据下载量和个人喜欢的应用主题选择下载相应的主题,四、下载成功后即...

一芯fc1178bc盘量产教程(一芯量产工具使用教程)

fc1178bc量产工具没有显示u盘拔下U盘,关闭量产工具,再插上U盘(先要确认卸载了安国的驱动,如果不能确认,运行LoadDriver.exe卸载),然后插上U盘,右键我的电脑---属性---硬件-...

电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
  • 电脑怎么样还原原来的系统(电脑怎么还原之前的系统版本)
u盘内文件损坏怎么办(u盘内文件损坏怎么办解决)

以下是8种修复U盘文件损坏的方法:1.风险自担型:试图直接复制文件如果U盘的部分文件损坏,您可能可以使用此方法。请复制文件您能打开的所有文件,并尝试将它们粘贴到桌面或其他文件夹中。但是请...

internet explorer怎么更新(22号天蝎座的运势)

1、打开IE浏览器。2、点击位于浏览器窗口的右上角的功能按钮。3、点击关于InternetExplorer。它位于下拉菜单的底部。4、勾选“自动安装新版本”复选框。它位于“关于Internet...

snapseed(snapseed手机修图软件免费版)

Snapseed是一款非常流行的手机修图工具,下面是Snapseed工具最全教程:1.打开照片:打开Snapseed,点击左上角的“打开”按钮,选择需要修图的照片。2.自动增强:点击屏幕左下角的“...

canon佳能打印机驱动下载(下载佳能打印机驱动程序)

打开开始菜单,选择运行。输入gpedit.msc,并确定。选择左边“windows设置”,右边鼠标左键双击“安全设置”。选择策略在选择安全选项再鼠标左键双击“设备:防止用户安装打印机驱动程序”。选择已...

爱思助手安卓版下载(爱思助手安卓版下载v1.21.03)

容易造成系统的崩溃在爱思助手中安装的软件都打不开或者发生闪退,很容易造成系统的崩溃需要重新刷机,所以一般不太推荐使用爱思助手。爱思助手上下载正版软件不需要AppleID,这是为了方便不会注册的用户,但...

微软拼音输入法app(微软拼音输入法App下载)
微软拼音输入法app(微软拼音输入法App下载)

1、选择微软拼音输入法的图标,点击鼠标右键,出现菜单后选择设置选项。2、在高级里把美式键盘改为微软拼音输入法,然后点击右下角的属性按钮。3、点击逐键提示选项后,选择确定按钮,在后面出现对话框中点击应用即可。微软拼音输入法是一种基于语句的智能...

2025-12-31 04:51 off999

win10怎么更新蓝牙驱动(win10 更新蓝牙驱动)

1.电脑桌面,右键【此电脑】,点击【属性】。2.然后点击【设备管理器】。3.然后展开【蓝牙】。4.然后鼠标右键【Bluetooth】,点击【更新驱动程序(P)】。5.选择一种方式更新驱动,更新完驱动就...

360免费升级正版win10(360 win10免费升级)

  XP无法直接升级到Windows10.  能否升级还需要看硬件配置是否达标。如果达标可以通过以下方法来安装。  1、去系统网站下载win10镜像文件。  2、使用软碟通软件把镜像文件里面的gho....

w7正版系统多少钱一年(正版win7旗舰版系统多少钱)

所有的正版windows系统都是需要付费购买的,包括笔记本电脑中预装好的正版系统,相应的费用也算入购机款中。你问的外行了。1、OEM系统是正版的,但是只能用于本品牌机上,也就是联想的WIN7系统(即O...

取消回复欢迎 发表评论: