Python入门学习-DAY09-函数基础与参数

函数基础

一 定义函数的三种形式

1.1 无参函数
def foo():
  print(‘from foo‘)
foo()

1.2 有参函数
def bar(x,y):
  print(x,y)
bar(1,2)

1.3 空函数
def func():
  pass

def upload():
  pass

def download():
  pass

def login():
  pass

def register():
  pass

def ls():
  pass

二 调用函数的三种形式

2.1 语句形式
def foo():
  print(‘from foo‘)
foo()

2.2 表达式形式
def foo(x,y):
  res = x + y
return res

res=foo(1,2) 表达式形式
res1=foo(1,2)*100
print(res1)

2.3 可以当作参数传给另外一个函数
def max2(x,y):
  if x > y:
    return x
  else:
    return y

res=max2(max2(1,2),3)
print(res)

函数返回值

一 函数的返回值需要注意:

1 返回值没有类型限制
2 返回值没有个数限制
返回1个值:调用函数拿到的结果就是一个值
返回多个值:调用函数拿到的结果就是一个元组
返回0个值,或者不写return:调用函数拿到的结果就是None

二 return关键字:

return是函数结束的标志,函数内可以有多个return,但只要执行一次,整个函数就结束

def f1():
  print(‘first‘)
return 1
  print(‘second‘)
return 2
  print(‘third‘)
return 3

res=f1()
print(res)

def foo():
  count=1
  while True:
    print(count)
    if count == 3:
      return
    count+=1

foo()

def bar():
  pass

def foo():
  return [1,2],1,1.3,{‘x‘:1},bar

res=foo()
print(res)

def func():
  print(‘from foo‘)
return

res=func()
print(res)

函数的参数

函数的参数分为两大类:

1 形参: 指的是在定义函数阶段括号内指定变量名,即形参本质就是"变量名"

2 实参: 指的是在调用函数阶段括号内传入的值,即实参本质就是"值"

形参与实参的关系:在调用函数时,会将实参(值)赋值(绑定)给形参(变量名),
这种绑定关系在函数调用时临时生效,在调用结束后就失效了
def foo(x,y): #x=1 y=2
  x=1
  y=2
  print(x,y)

foo(1,2)

形参与实参的具体分类

一 位置参数

1.1 位置形参: 在定义函数阶段按照从左到右的顺序依次定义的形参,称之为位置形参
注意:但凡按照位置定义的形参,必须被传值,多一个不行,少一个也不行
def foo(x,y):
  print(x,y)
foo(1,2)#1,2
foo(1,2,3)#多,报错
foo(1,)#少,报错

1.2 位置实参: 在调用函数阶段按照从左到右的顺序依次传入的值,称之为位置实参
注意:但凡按照位置定义的实参,会与形参一一对应
def foo(x,y):
  print(x,y)

foo(2,1)

二 关键字参数

关键字实参: 在调用函数阶段,按照key=value的形式指名道姓地为形参传值
注意:
1. 可以完全打乱顺序,但仍然能指名道姓为指定的形参传值
2. 可以混合使用位置实参与关键字实参,但是必须注意:
2.1 位置实参必须放到关键字实参前面
2.2 不能对一个形参重复赋值
def foo(name,age):
  print(name,age)

foo(‘egon‘,18)#name=‘egon‘ age=18
foo(18,‘egon‘)#name=‘18 age=‘egon‘
foo(age=18,name=‘egon‘)#name=‘egon‘ age=18

foo(‘egon‘,age=18)#name=‘egon‘ age=18
foo(name=‘egon‘,18)#报错
foo(‘egon‘,age=18,name=‘lxx‘)#报错

三 默认参数

默认参数:指的是在定义函数阶段,就已经为某个形参赋值了,改形参称之为有默认值的形参,简称默认形参
注意:
1. 在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值
2. 位置形参应该放到默认形参前面
3. 默认参数的值在函数定义阶段就已经固定死了
4. 默认参数的值通常应该是不可变类型

def foo(x,y=2):
  print(x,y)

foo(1)#x=1,y=2
foo(1,3)#x=1,y=3
foo(y=3,x=1)#x=1,y=3

m=10
def foo(x,y=m):#y=m=10
  print(x,y)

m=20
foo(1) #x=1,y=10

def register(name,hobby,l=[]):
  l.append(hobby)
  print(‘%s 的爱好为 %s‘ %(name,l))

register(‘alex‘,‘piao‘)
register(‘lxx‘,‘喝腰子汤‘)
register(‘yxx‘,‘不洗澡‘)
register(‘egon‘,‘read‘)

alex 的爱好为 [‘piao‘]
lxx 的爱好为 [‘piao‘, ‘喝腰子汤‘]
yxx 的爱好为 [‘piao‘, ‘喝腰子汤‘, ‘不洗澡‘]
egon 的爱好为 [‘piao‘, ‘喝腰子汤‘, ‘不洗澡‘, ‘read‘]

def register(name, hobby, l=None):
  if l is None:
    l=[]
    l.append(hobby)
  print(‘%s 的爱好为 %s‘ % (name, l))

register(‘alex‘, ‘piao‘)
register(‘lxx‘, ‘喝腰子汤‘)
register(‘yxx‘, ‘不洗澡‘)
register(‘egon‘, ‘read‘)

alex 的爱好为 [‘piao‘]
lxx 的爱好为 [‘喝腰子汤‘]
yxx 的爱好为 [‘不洗澡‘]
egon 的爱好为 [‘read‘]

位置形参vs默认形参

对于大多情况下传的值都不相同的,应该定义成位置形参
对于大多情况下传的值都相同的,应该定义成默认形参

def register(name,age,sex=‘男‘):
  print(name,age,sex)

register(‘李铁蛋‘,18,)
register(‘李银蛋‘,28)
register(‘张铜蛋‘,38)
register(‘刘卤蛋‘,48)
register(‘刘二丫‘,19,‘女‘)

李铁蛋 18 男
李银蛋 28 男
张铜蛋 38 男
刘卤蛋 48 男
刘二丫 19 女

四 可变长度的参数

站在实参的角度,参数长度可变指的是在调用函数时,传入的实参值的个数不固定
而实参的定义方式无法两种:位置实参,关键字实参,对应着形参也必须有两种解决方案*与**,类分别应对溢出的位置实参与关键字实参

1. 在形参中带*:会将调用函数时溢出位置实参保存成元组的形式,然后赋值*后的变量名

def foo(x,y,*z): #z=(3,4,5,6)
  print(x,y,z)

foo(1,2,3,4,5,6)

2. 在实参中带*: 但凡在实参中带*星的,在传值前都先将其打散成位置实参,再进行赋值

def foo(x,y,*z): #z=(3,4,5,6)
print(x,y,z)
foo(1,*[2,3,4,5,6]) #foo(1,2,3,4,5,6)

def foo(x,y,z):
  print(x,y,z)
foo(1,*(2,3,4,5,6)) #foo(1,2,3,4,5,6)
foo(*(1,2,3)) #foo(1,2,3)
foo(*‘hello‘)#  foo()
foo(*‘abc‘) #foo(‘a‘,‘b‘,‘c‘)

3. 在形参中带**:会将调用函数时溢出关键字实参保存成字典的形式,然后赋值**后的变量名

def foo(x,y,**z): #z={‘z‘:3,‘a‘:1,‘b‘:2}
  print(x,y,z)

foo(1,y=2,a=1,b=2,c=3)

4. 在实参中带**: 但凡在实参中带**星的,在传值前都先将其打散成关键字实参,再进行赋值

def foo(x,y,**z):# z={‘a‘:100,‘b‘:200}
  print(x,y,z)

foo(1,**{‘a‘:100,‘b‘:200,‘y‘:111})# foo(1,b=200,a=100,y=111)

def foo(x,y,z):
  print(x,y,z)

foo(**{‘y‘:111,‘x‘:222,‘z‘:333})# foo(z=333,x=222,y=111)

5. 规范: 在形参中带*与**的,*后的变量名应该为args,**后跟的变量名应该时kwargs

def foo(*args,**kwargs): #args=(1,2,3,4,5) kwargs={‘a‘:1,‘b‘:2,‘c‘:3}
  print(args)
  print(kwargs)
foo(1,2,3,4,5,a=1,b=2,c=3)

def bar(x,y,z):
  print(x,y,z)

def wrapper(*args,**kwargs): #args=(1,2,3,4,5,6) kwargs={‘a‘:1,‘b‘:2,‘c‘:3}
  bar(*args,**kwargs)
  bar(*(1,2,3,4,5,6),**{‘a‘:1,‘b‘:2,‘c‘:3}) #bar(1,2,3,4,5,6,a=1,b=2,c=3)
wrapper(1,2,3,4,5,6,a=1,b=2,c=3)

!!!!!!!!!!!!!!!当我们想要将传给一个函数的参数格式原方不动地转嫁给其内部的一个函数,应该使用下面这种形式
def bar(x,y,z):
  print(x,y,z)

def wrapper(*args,**kwargs): #args=(1,2) kwargs={‘z‘:3}
  bar(*args,**kwargs)
  bar(*(1,2),**{‘z‘:3}) #bar(1,2,z=3)
wrapper(1,2,z=3) #虽然调用的是wrapper,但是要遵循的确是bar的参数标准

五 命名关键字参数: 放到*与**之间的参数称之为命名关键字参数

注意: 命名关键字参数必须按照key=value的形式传值
def foo(x,y,*args,m,n,**kwargs): #args=(3,4,5,6,7,8)
  print(x,y)#  1,2
  print(args)# (3,4,5,6,7,8)
  print(m,n) #222,333
  print(kwargs)

foo(1,2,3,4,5,6,7,8,n=333,m=222,a=1,b=2)

def foo(*,x=1,y):
  print(x)
  print(y)

foo(y=2222,x=1111)

1111
2222

foo(y=2222)

1
2222

原文地址:https://www.cnblogs.com/xvchengqi/p/9392373.html

时间: 2024-11-09 11:30:04

Python入门学习-DAY09-函数基础与参数的相关文章

Python 入门学习 -----变量及基础类型p一天

Python的变量和数据类型 1 .python的变量是不需要事先定义数据类型的,可以动态的改变 2. Python当中一切皆对象,变量也是一个对象,有自己的属性和方法 我们可以通过 来查看变量的类型:变量名.__class__ 调用变量的方法:变量名.方法() #!/bin/env python #coding:utf-8 #type 打印出数据的类型 print type(1) print type(1.0) print type("helloworld") #虚数 如12j a

python入门学习:7.函数

python入门学习:7.函数 关键点:函数 7.1 定义函数7.2 传递实参7.3 返回值7.4 传递列表7.5 传递任意数量的实参7.6 将函数存储在模块中 7.1 定义函数 ??使用关键字def告诉python要定义一个函数,紧接着跟着函数名,冒号.后面的缩进构成函数体.例如: 1def func_name():2    函数体34def greet_user():5    """显示简单问候语"""6    print("hel

Python入门学习:一步步教你怎么用Python写贪吃蛇游戏

前几天,有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),再合适不过了. 这里通过一个Python入门学习的例子跟大家详细讲解一下! 先通过下面这个效果图来感受下吧! 1 环境 操作系统:Windows Python版本:3.7.3 2 需求分析 我们先来回顾下贪吃蛇中的游戏元素及游戏规则. 首先呢,需要有贪吃蛇.有食物:需要能控制贪吃蛇来上下移动获取食物:贪吃蛇在吃取食物后,自身长度增加,同时食物消

python入门学习:8.类

python入门学习:8.类 关键点:类 8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类 8.1 创建和使用类 ??面向对象编程是最有效的软件编写方法之一.在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象.根据类来创建对象被称为实例化,这让你能够使用类.8.1.1 创建dog类??下面创建一个dog类: 1calss Dog(): 2 3    def __init__(self,name,age): 4        self.name = n

python 入门学习 载抄

python入门 解释型语言 和编译型语言 计算机本身不能识别高级语言,当我们运行一个程序的时候,需要一个“翻译” 来把 高级语言转换成计算机能读懂的语言. “翻译”过程分两种: 编译 编译型语言在执行程序前,首先会通过编译器执行一个编译的过程,把程序编译成机器语言. 之后,程序再次运行的时候,就不要“翻译”了,而是可以直接执行.比如C语言. 编译型语言的优点在于在运行程序的时候不用解释,可直接利用已经翻译过的文件. 解释 解释型语言就没有编译的过程,而是在程序运行的时候,通过解释器逐行解释代码

Python入门学习:1.变量和简单的数据类型

python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用 ??变量,顾名思义是一个可变的量,每个变量都存储一个值--与变量关联的信息. 1message = "hello world!"2# message 是一个变量3print(message) ??在python中使用变量时,需要遵循一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或者下划线打头,但不能以数

Python入门学习指南--内附学习框架

Python入门学习指南 最近开始整理python的资料,博主建立了一个qq群,希望给大家提供一个交流的同平台: 78486745 ,欢迎大家加入共同交流学习. 对于初学者,入门至关重要,这关系到初学者是从入门到精通还是从入门到放弃.以下是结合Python的学习经验,整理出的一条学习路径,主要有四个阶段 NO.1 新手入门阶段,学习基础知识 总体来讲,找一本靠谱的书,由浅入深,边看边练. 网上的学习教程有很多,多到不知道如何选择.所有教程在基础知识介绍方面都差不多,区别在于讲的是否足够细(例如运

Python入门学习 DAY 01 计算机基础

Python入门 DAY 01 作为一名刚刚学习python的小白,我首先去学习的并不是python语言的基础知识,而是先对计算机的基础进行了一个初步的了解,以下内容便是在学习python之前我去学习到的大致内容. 1.什么是编程语言    语言是一个事物与另外一个事物沟通的介质    编程语言是程序员与计算机沟通的介质    2.什么是编程    编程就是程序按照某种编程语言的语法规范将自己想要让计算机做的事情表达出来    表达的结果就是程序,程序就是一系列的文件    3.为什么要编程  

Python之路-函数基础和参数

一.函数定义 def 函数名(arg1,arg2): =============>函数定义 '描述信息' =============>print(函数名.__doc__) 显示注释 函数体 =============>函数主体 return 1 =============>返回值可以是任意类型   1.空函数 def 函数名(): pass 一定要加上pass,一般在函数功能定义出来,方便以后扩展编写 2.内置函数 内置在Python解释器中,可以直接被调用的builtins 3.