Python学习之函数初识

一、函数初识

一、定义和使用

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数式编程最重要的是增强代码的重用性和可读性,避免重复代码

def 函数名(参数):
        
    ...
    函数体
    ...
    返回值

  函数的定义主要有如下要点:

 

定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。

   def 是固定的,不能变,他就是定义函数的关键字。

   空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。

   函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能

   括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!

注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。

调用:就是 函数名() 要记得加上括号。

二、函数的调用

#函数定义
def mylen():
    """计算s1的长度"""
    s1 = "hello world"
    length = 0
    for i in s1:
        length = length+1
    print(length)

#函数调用  
mylen()
View Code

 

三、函数的返回值

不写return的情况下,会默认返回一个None

 没有return

  只写return,后面不写其他内容,也会返回None,有的同学会奇怪,既然没有要返回的值,完全可以不写return,为什么还要写个return呢?这里我们要说一下return的其他用法,就是一旦遇到return,结束整个函数

 只写return

  return None:和上面情况一样,我们一般不这么写。

返回一个值

      刚刚我们已经写过一个返回一个值的情况,只需在return后面写上要返回的内容即可。  

 return返回一个值

返回多个值

  可以返回任意多个、任意数据类型的值

 return返回多个值

  返回的多个值会被组织成元组被返回,也可以用多个值来接收

 多个值接收

 

四、函数的参数

带参数的函数

我们告诉mylen函数要计算的字符串是谁,这个过程就叫做 传递参数,简称传参,我们调用函数时传递的这个“hello world”和定义函数时的s1就是参数

实参与形参

参数还有分别:

我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。

定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。 

传递多个参数

参数可以传递多个,多个参数之间用逗号分割。

 传递多个参数

位置参数

  站在实参角度

    1.按照位置传值------必须一一对应

 按照位置传参

    2.按照关键字传值

PS  : 三元运算

z = x  if  x > y else  y (适用于if,else 语句)

 按照关键字传参

    3.位置、关键字形式混着用-----有顺序,位置参数在前,关键字参数在后

 混合传参

 

站在形参角度

    位置参数必须传值

 View Code

默认参数

    1.正常使用

      使用方法

      为什么要有默认参数:将变化比较小的值设置成默认参数

    2.默认参数的定义

 默认参数

参数陷阱:默认参数是一个可变数据类型

 默认参数是个可变类型

 

动态参数

一、*args 动态参数,不定长参数

args元组,他包含了你所有的位置参数.

def func(*args):
    print(args,type(args))
func(1,2,'alex',3,4,5,6,8,4,7,2)

#(1, 2, 'alex', 3, 4, 5, 6, 8, 4, 7, 2) <class 'tuple'>

  

def func(a,b,c,*args,):
    print(a)
    print(b)
    print(c)
    print(args,type(args))
func(1,2,'alex',3,4,)

#1
2
alex
(3, 4) <class 'tuple'>

 

def func(a,b,c,*args,sex = '男'):
    print(a)
    print(b)
    print(c)
    print(sex)
    print(args,type(args))
func(1,2,'alex','wusir','ritian ',sex='女')

# 1
2
alex
女
('wusir', 'ritian ') <class 'tuple'>

 

**kwargs 他包含了关键动态参数

kwargs输出的是字典格式

def func(**kwargs):
    print(kwargs)
func(a = 1,b = 4,c = 3,d = 2)

#{'a': 1, 'b': 4, 'c': 3, 'd': 2}

  

 形参顺序

     位置参数,*args,默认参数,**kwargs

def func(a,b,c,*args,sex = '男',**kwargs):
    print(a)
    print(b)
    print(c)
    print(sex)
    print(args,type(args))
    print(kwargs)
func(1,2,'alex','wusir','ritian ',sex = '女',name = 'taibai',age = 21)

  

万能参数

def func2(*args,**kwargs):
    #万能参数
    print(args)
    print(kwargs)
func2(1,2,3,5,name='alex',age=56)

#(1, 2, 3, 5)
{'name': 'alex', 'age': 56}

  *魔法运算: 打散

 

def func2(*args,**kwargs):
    print(args)
    #(1,2,3)
l1 = [1,2,3,]
l2 = [1,2,3,2,3,100,2]
func2(*l2,*l1)

#(1, 2, 3, 2, 3, 100, 2, 1, 2, 3)

  

def func3(*args,**kwargs):
    print(args)
    print(kwargs)
dic = {'name':'alex','age':12}
dic2 = {'name':'jin','age':22}
func3(**{'name1':'alex','age1':12},**{'name2':'jin','age2':22},name3 = 'wusir')

#()
{'name1': 'alex', 'age1': 12, 'name2': 'jin', 'age2': 22, 'name3': 'wusir'}
posted @ 2018-02-01 17:31  GuoXY  阅读(133)  评论(0编辑  收藏  举报