python 基础3 函数
函数是什么?
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
def sayhi():#函数名
print("Hello, I'm nobody!") sayhi() #调用函数
def abc1():
pass def abc2():
return 0 def abc3():
return 0,'hello',['a','b','c'],{'name':'ming'} x= abc1()
y= abc2()
z= abc3()
2.函数参数与局部变量
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

位置参数与关键参数
关键参数
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后
def abc1(x,y):
print(x)
print(y) abc1(1,2)
abc1(y=2,x=1)
# abc1(x=2,3)
# 位置参数与关键参数,关键参数一定要写在位置参数后边儿 stu_register(age=22,name='ming',course="python",)
默认参数
def abc1(x,y=2):
print(x)
print(y) abc1(3,y=3) # 默认参数特点:1.调用函数的时候,默认参数可有可没 2、默认参数后不能再跟非默认参数。
# 默认参数用途: 1、默认安装路径、一键安装 2、MySQL等默认端口
非固定参数
若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数
def abc2(*args):
print(args) abc2(1,2,3,4,5)
abc2(*(1,2,3,4,5)) # args = tuple ([1,2,3,4,5]) # 参数组,一定是在最后 **args:接收N个位置参数,转换成元组; def abc3(x,*args):
print(x)
print(args) abc3(1,2,3,4,5,6,7)
**kwargs
def abc4(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex']) abc4(name = 'mike',age = 2 ,sex = 'none')
abc4(**{'name' : 'mike','age' :2 ,'sex' :'none'}) print("-------------------------------") def abc5(name,**kwargs):
print(name)
print(kwargs) abc5('alex',age =18,sex = 'none') print("-------------------------------") def abc5(name,**kwargs):
print(name)
print(kwargs) abc5('alex',age =18,sex = 'none') print("-------------------------------") def abc6(name,age = 18 ,**kwargs):
print(name)
print(age)
print(kwargs) abc6('Ben',age=12,sex = 'none',hobby ='football')
abc6('Ben',12,sex = 'none',hobby ='football')
def abc7(name,age = 18 ,*args,**kwargs):
print(name)
print(age)
print(args)
print(kwargs) abc7('Ben',18,11,21,123, sex ='helo' )
全局与局部变量
school = "清华" # 全局变量 作用域是整个程序 在整个程序都生效 def change_name(name):
global school
school = "北大"
print(name,school)
name = "MIKE" # 局部变量 这个函数就是这个变量的作用域 变量只在函数范围内生效
print("my name is ",name) name = "mike"
change_name(name)
print(school)
print("my name is",name) # 在函数中,默认是不能修改全局变量的值; 但是如果通过“global”声明字声明后,就可以改变全局变量的值
names = ["mike","ming","xiao hong"] def change_name():
names[0] = "Tom"
print("my name is",names ) change_name()
print(names)
#所有字符串 数字不能在局部变量改 ,但列表、字典可以被函数内部修改并影响全局
返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
递归
函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
def calc(n):
print(n)
return calc(n+1) calc(0)
最大递归次数999层
例子:每次传一个值 /2 除到没有为止
def calc(n):
print(n)
if int(n/2)>0:
return calc( int(n/2) ) # 返回时候调用自己,又执行 calc(50)
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
python 基础3 函数的更多相关文章
- python基础——匿名函数
python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...
- python基础——返回函数
python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...
- python基础——sorted()函数
python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- python基础——匿名函数及递归函数
python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...
- 八. Python基础(8)--函数
八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x): ' ...
- python基础之函数详解
Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...
- Python学习笔记(一)python基础与函数
1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
- Python基础__函数
本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍.函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调用 ...
随机推荐
- cp自动创建层级结构的例子
一个拷贝命令的技巧,不仅拷贝文件,而且拷贝目录结构.记录下来. *拷贝的时候,自动创建参数中源文件的路径:#cp --parents parentdir1/parentdir2/sourcefile ...
- pom.xml文件错误
刚创建的maven项目,马上pom.xml的第一行就报错这是第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xm ...
- Delphi Code Editor 之 基本操作
Delphi Code Editor 之 基本操作 毫无疑问,Delphi是高度可视化的.这是使用Delphi进行编程的最大好处之一.当然,任何一个有用的程序中都有大量手工编写的代码.当读者开始编写应 ...
- android:listView Button 焦点问题
要想listView的item与其上的button皆能得到焦点响应: 在listView item 的布局中: 在<RelativeLayout>中 android:descendantF ...
- Qt编写机房安全作业预警系统
最近给一个朋友做了个项目,运行在一个日本大型企业中,大屏显示.机房安全作业预警系统工事主要是由监控系统和报警系统组成.其目的就是通过监控系统实时观察空压机房内的动态,通过报警系统确认空压机房在规定的时 ...
- javaweb基础 02--javaweb基础概念
1.WEB资源 * 静态web资源:指web页面中供人们浏览的数据始终是不变(如 html 页面). * 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内 ...
- Elasticsearch学习之SearchRequestBuilder的query类型
1. 分词的时机 对于ES来讲,可以对文档的内容进行分词(前提是设置了analyzed),也可以对输入的搜索词进行分词.对输入的搜索词进行分词时需要看下使用的什么类型的query.不同的query可能 ...
- How to Use Postman to Manage and Execute Your APIs
How to Use Postman to Manage and Execute Your APIs Postman is convenient for executing APIs because ...
- input type="number"时,maxlength不起作用怎么解决
最近小颖在做公司的angular项目时,发现当input type="number"时,maxlength不起作用,百度了下解决方式,顺便记录下,以便后期查看嘻嘻 <inpu ...
- linux常用命令大全2--挂载/dpkg/文件系统分析/apt/光盘/关机
挂载一个文件系统 mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在 umount /dev/hda2 卸载一个叫做hda2 ...