一、为什么要使用函数?

  因为如果没有函数我们平时的代码就会有很多重复

  避免代码重用

  提升代码的可读性

二、函数的定义与调用:

  

1def  函数名(参数1,参数2)

    ''' 函数注释'''

    print('函数体')

    return 返回值

函数就是封装一个功能

定义:

  def 关键字开头,空格之后接函数名和圆括号,最后加一个冒号

  def是固定的不能改变

函数名的定义和变量一样 :数字字母下划线 任意组合 ,不能是数字开头  不能是关键字  要具有可描述性

函数的调用

返回值=函数名(参数1,参数2)#记得函数名后面加括号

下面我们先来定义一个求计算字符串长度的函数。假如我们的len()函数现在不能用了,那么我们就需要定义一个函数,求字符串的长度。如果让我们一次一次的去写相同的代码,会显得很麻烦。这时候我们的函数就上场了。

def length():s= 'hello world'length = 0for i in s :length +=1print(length)
print(length())    #因为没有返回值你打印最后会显示一个null
def length():s= 'bjbbabjsaofsa'num = 0for i in s:num +=1return num
m = length()
print(m)
# print(length())#return的时候你可以定义一个变量来接收 也可以不接收直接打印 但是如果print就不可以 但是一般最好不要在函数中写print太lowle 

View Code

函数的返回值:

定义函数一般不要在函数中写print

return

1、在函数中遇到return就结束函数

2、将值返还给函数的调用者

  无return

    return None

  return一个值该值是什么就返还什么

大家看一下对与函数中只能存在一个return 因为第一个碰到return就把函数结束了

>>> def func(a, b ,c):return areturn b>>> print(func(3, 7, 8))
3     #只返回第一个return的3  因为碰到第一个return就把函数结束了 其他的return 存在的没有意义了
>>> 

  

函数的传递参数:

  两个方面:

  实参角度:

  1形式参数和实际参数

  

def my_len(a): #这个a就是形式参数 用来接收实际参数的return l
print(my_len(3))  #实际参数 实实在在存在的

View Code

  2位置传参 一  一对应

  

def func(a, b ,c):return a, b, c
print(func(2, 3,700))   #一一对应并且是当作一个元组打印出来

  3、混合传参----->关键字永远在最后面

  

def func(a, b=30 ,c): #形式参数和实际参数的一样都是直接赋值的要放在最后不然会报错,这个你看b直接赋值了但是放在了中间就报错return a, b, c,
print(func(2, 3,b=700))

  

def func(a, c ,b=40):return a, b, c  #这个就是对的  就是全部都放在后面
print(func(2, 3,b=700))

如果你return的好几个值都在一起return那么最后的返回值显示出来就在一个元组内

3,函数名可以作为函数的参数。
def func():
pass
def func1(a):
a()
func1(func)
4,函数名可以作为函数的返回值。
def func1(a):
return a
func1(func)()

默认传参:

def Info(username,sex='男'):  #定义一个默认参数  sexwith open('one',encoding= 'UTF-8',mode = 'a')as f :  #a就是追加内容f.write('{}\t{}\n'.format(username,sex))
while True :username= input('输入您的姓名:(男生为1开头)').strip()if '1' in username :username =username[1:]Info(username)else :Info(username,sex='女')

View Code

函数的动态参数:

因为我们的静态参数只能接收固定的  不能接收哪些不确定的或者多余的变量

动态参数,也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,**kwargs接收,args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。

按位置传值多余的参数都由args统一接收,保存成一个元组的形式

按照关键字传值接收多个关键字参数由kwargs接收 保存成一个字典的形式

# def Func(a,*args,b='男'):
#     print(a)
#     print(b)
#     print(*args)
# Func(3,2,3,4,b='你')# def n (a,b,c,**kwargs):
#     print(kwargs)
#
# n(1,2,3,d=5,f=6)
# def func(*args):
#     print(args) #(1,2,30,1,2,33.。。。。。)
# l1 = [1,2,30]
# l2= [1,2,33,21,45,66]
# func()
# def Func(*args):
#     print(args)
#
#
# li={'name':1,'age':5}
# l1 = [1,2,30]
# l2= [1,2,33,21,45,66]
# Func(*li)
# def Nu(a,b,*args,sex='麻痹'):
#     print(args)
#     print(sex)
# Nu(3,6,'pfapifuafjfbsa',sex='弄哈')
# def N():
#     print(a,*args,**kwargs)
#     print(args)
#     # print(kwargs)
#     print(kwargs)
#
#
# N(1,'2345',b=12)
#*agrs  动态参数  万能参数#args 动态参数 接收的就是实参对应的 所有位置参数 并将其放在元组中
#位置参数  *args 默认参数
# def func (a,b,c,*args,e='男'):
#     print(a)
#     print(b)
#     print(c)
#     print(args)
#     print(e)
# func(1,2,3,4,5,6,e='女')
#**kwargs
# def func(a, b,c, d, *args, e='男',**kwargs):
#     print(a)
#     print(b)
#     print(c)
#     print(d)
#     print(args)
#     print(kwargs)
# func(1,2,3,4,5,m=9)# 最终顺序:位置参数,*args 默认参数 **kwargs
# def func(a,b,c,e='laowang',*args):
#     print(a)
#     print(b)
#     print(c)
#     print(e)
#     print(args)
# func(1,2,3,4,7,8,89)  #如果默认参数放在args之前那么传值就会把args给传递给默认参数一个 把它给覆盖了 所以一般不这样做# *的魔法运用
# def func(*args):
#     print(args)
#
# # l =[1,2,3]
# # l2=[1,2,3,4,5,6]
# l=(1,2,3,4)
# l2=(2,3,4,5)
# func(*l,*l2)  #*号可以把两个列表元组给传递进函数内 然后转化位一个元组中 因为*args接收完 那么用args输出后就会把所有的元素都放在元组中# def func(*args):
#     print(args)
#
# l = [1,23,4,56,78]
# l1=[1,2,3,4]
# a={'name':'alex','age':12}
# func(*a)  #如果是字典运用*号然后再把字典让args接收的话就会把字典中的key值给放在元组中打印出来
# func(*l,*l1) # *星号可以放列表  字符串  元组 字典(字典只是显示key值),int类型是不可以放进去的
# def func(**kwargs):
#     print(kwargs)
# dic ={'name1':'alex','age1':47}
# dic1={'name':'old_man','age':56}
# func(**dic,**dic1)#单个的*可以接收不同的列表、元组、字符串内的相同的元素 因为它可以把相同的元素 变成同一个,而**两个星号不可以接收两个人不同的字典内的相同的key就是用**组合两个字典 这两个字典内不可以出现相同的key#在函数的定义时, *rags、**kwargs# 代表的是聚合
# def func(*args,**kwargs):
#     print(args)
#     print(kwargs)
# dic1 = {'name1':'alex','age1':46}
# dic2 = {'name':'老男孩','age':56}
# func(*[1,2,3,4],*'jkbabl',**dic1,**dic2)   *和 **可以同时使用的
## def func(*args,**kwargs):
#     print(args)
#     print(kwargs)
#
# dic1 = {'name1':'alex','age1':46}
# dic2 = {'name':'老男孩','age':56}
# func(*[1,2,3,4],*'bjbfbabfa',**dic1,**dic2) #字符串如果打散放入args中就会以单独的字符串类型的形式放入进去

View Code

*args必须放在默认参数之前放在位置参数之后 ,**kwargs必须放在最后 也就和静态参数一样 默认参数都在最后 而**kwargs接收的是赋值的默认参数 所以必须放在最后

转载于:https://www.cnblogs.com/zhaoyunlong/p/8665112.html

python ---------函数相关推荐

  1. Pass算子python 函数

    Pass算子python 函数 函数 • 函数是代码的一种组织形式 • 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作 • 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的是函数 ...

  2. Python 函数的可变参数(*paramter与**paramter)的使用

    Python 函数的可变参数主要有 *paramter与**paramter 可变参数主要有 *paramter的作用 接受任意多个实际参数并放到一个元组中 def people(*people):f ...

  3. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  4. python系统提供构造函数传入参数_[ Python入门教程 ] Python函数定义和使用

    函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果.通过使用函数,可以提高代码的重复利用率.本文主要介绍Python函数的定义.调用和函数参数设置方法. 函数的定义 Python函数定 ...

  5. python函数第二次运行报错_Python学习笔记2-函数、高级特性

    函数 调用函数 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数 >>> abs(100) 100 >>> abs(-20) 20 ...

  6. [教程]Python函数的参数

    Python函数的参数 位置参数.默认值参数.可变参数.关键字参数和命名关键字参数 1 函数结构 def 函数名(参数):函数体返回值 2 位置参数 略 3 默认值参数 略 4 可变参数 # 可变长度 ...

  7. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

  8. python函数参数*arg和**kwargs分别代表什么?

    python函数参数*arg和**kwargs分别代表什么? 注意: 注意:参数arg.*args.**kwargs三个参数的位置必须是一定的.必须是(arg,*args,**kwargs)这个顺序, ...

  9. python 函数 默认参数

    python 函数 默认参数 def add(a=1, b=2): # a,b设置默认参数c = a + breturn c c = add(a=2) # 如果不填,就是默认参数 print(c) 4

  10. Python的零基础超详细讲解(第十二天)-Python函数及使用

    基础篇往期文章: Python的零基础超详细讲解(第一天)-Python简介以及下载_编程简单学的博客-CSDN博客 Python的零基础超详细讲解(第二天)-Python的基础语法1_编程简单学的博 ...

最新文章

  1. 干货!解读2016-2017全球人工智能技术及产业发展的现状及趋势~
  2. Devexpress 之gridControl
  3. Google Android开发精华教程
  4. v4l2 框架下如何设置分辨率_如何在端外投放的场景下实现前端实时CEP框架?
  5. 第四范式携手宁德时代 共建智能制造AI新基础设施
  6. BindingException: Parameter 'XXX' not found. Available parameters are [collection, list]
  7. Leetcode589.N-ary Tree Preorder TraversalN叉树的前序遍历
  8. http安全 Java_HTTP通信安全-身份验证 | 字痕随行
  9. 2013年6月份安徽省计算机等级考试二级c语言答案,2013年计算机二级C语言上机试题九及答案...
  10. activemq spring监听不了
  11. 社交礼仪与口才艺术 艾跃进
  12. 解决print spooler打印服务自动停止的过程记录
  13. iOS 手势解锁密码
  14. aspnetpager使用介绍
  15. Ubuntu20.04 在anaconda上,opencv-python支持h264编码
  16. html p标签嵌套a,HTML标签嵌套规则详细归纳适合新手朋友
  17. 触摸屏键盘插件Virtual Keyboard 该怎么用 Virtual Keyboard 入门指南
  18. IOS UILabel 多行文字自动换行
  19. 广州日报新媒体发展战略解析(转)
  20. Android任务栈的理解

热门文章

  1. 全球及中国静脉器械行业发展形势及前景战略规划建议报告2021-2027年版
  2. WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标
  3. Kickstart配置文件解析
  4. 阿里云配置负载均衡实例
  5. 转 一个SMD 0805的LED的电流,电压,亮度关系表
  6. smarty2和smarty3
  7. 捕获SocketConnection组件连接异常的几个好贴
  8. jenkins blue ocean 与 pipeline
  9. 深度剖析Kubernetes API Server三部曲 - part 2
  10. 一个案例说出python的十余个语法知识点