08-Python之路---初识函数

🐴 Python之路---初识函数✔️

程序员三大美德:python

  1. 懒惰

由于一直致力于减小工做的总工做量。程序员

  1. 缺少耐性

由于一旦让你去作本该计算机完成的事,你将会怒不可遏。app

  1. 傲慢

由于被荣誉感冲晕头的你会把程序写得让谁都挑不出毛病来。函数

你们好😄, 如今让咱们一块儿来学习一下函数 🎉学习

Why-为何要使用函数?

如今咱们须要计算一个字符串的长度,咱们能够直接使用len()方法:翻译

num = len('hello')

可是若是咱们不用len方法,怎么实现这个需求?其实也不难:code

s = 'hello'
length = 0
for i in s:
    length += 1
    
print(length)

好了,功能实现了,而后又有一个需求(产品经理平常加需求),要计算另外一个字符串的长度---“world”。blog

因而,本着程序员三大美德,😏咱们使用最强大的快捷键---Ctrl+c , Ctrl+v:字符串

s1 = 'world'
length = 0
for i in s1:
    length += 1
    
print(length)

这样确实能够实现需求,可是总感受不是那么完美,为何呢?pycharm

首先,以前我只须要执行len方法就能够拿到一个字符串的长度,而如今为了实现相同功能,咱们须要把相同的代码写不少遍 --- 代码冗余

其次,刚刚的代码不是那么容易读懂 ---- 可读性差

咱们就想,要是咱们能像使用len同样使用咱们这一大段“计算长度”的代码就行了。这种感受有点像给这段代码起了一个名字,等咱们用到的时候直接喊名字就能执行这段代码就行。

函数定义与调用

如今教你们一个技能,把代码装起来:

def mylen():
    """计算字符串长度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    print(length)

来分析下这段代码:

​ 其实除了def这一行和后面的缩进,其它的和前面的代码是同样的。

​ 如今执行如下,你会发现啥也没发生!

​ 由于这里咱们只是把代码装起来了,还不会往外拿,拿应该怎么拿出来呢?

mylen()

这就是代码取出来的过程。

# 定义函数
def mylen():
    """计算字符串长度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    print(length)
    
# 调用函数
mylen()

总结:

定义:

  • def关键字开头,空格后接函数名称圆括号(),最后还有一个“:”

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

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

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

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

函数返回值

前面咱们写了一个函数,这个函数能够帮助咱们计算字符串的长度,而且把结果打印出来。可是,这和咱们的len方法还不是太同样。之前咱们调用len方法会获得一个值,咱们能够用一个变量来接收这个值。

str_len = len('hello')

那么咱们写的函数能作到吗?

# 定义函数
def mylen():
    """计算字符串长度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    print(length)
    
# 调用函数
str_len = mylen()
print('str_len : %s'%str_len)

执行代码,得到的输出结果是str_len值为None,这说明什么也没返回

那么应该怎么让他有返回值呢?

return

# 定义函数
def mylen():
    """计算字符串长度"""
    s = 'hello'
    length = 0
    for i in s:
        length += 1
    return length
    
# 调用函数
str_len = mylen()
print('str_len : %s'%str_len)

只须要在函数最后加上一个return的关键字,return后面写上你要返回的值就能够了

return关键字的做用

​ return 是一个关键字,在pycharm里,你会看到它变成蓝色了。

​ 这个词翻译过来就是“返回”,因此咱们管写在return后面的值叫“返回值”

  • 没有返回值:

    • 不写return的状况下,会默认返回一个None
    • 只写return,后面不写其余内容,也会返回None,那么为啥要写呢?return的其余用法,就是一旦遇到return,结束整个函数。  
    • return None:和上面的两种状况同样,咱们通常不这样写。
  • 返回一个值:

    ​ 注意:*return和返回值之间要有空格,能够返回任意数据类型的值

  • 返回多个值:

    • 能够返回任意多个、任意数据类型的值

      def demo1():
          '''返回多个值''' 
          return 1,2,3,4
      
      
      def demo2():
          '''返回多个任意类型的值'''
          return 1,['a','b'],3,4
      
      ret1 = demo1()
      print(ret1)
      ret2 = demo2()
      print(ret2)
    • 返回的多个值会被组织成元组被返回,也能够用多个值来接收

      def demo3():
          return 1,['a','b'],3,4
      
      #返回多个值,用一个变量接收
      ret3 = demo3()
      print(ret2)
      
      #返回多个值,用多个变量接收
      a,b,c,d = demo3()
      print(a,b,c,d)
      
      #用多个值接收返回值:返回几个值,就用几个变量接收
      a,b,c,d = demo3()
      print(a,b,c,d)

函数的参数

这个函数仍是不完美,由于以前咱们使用len函数的时候,是能够想计算谁就计算谁的长度,可是咱们写的这个函数只能计算“hello”的长度,换一个字符串就须要更改函数内部的变量,这样可不行,那应该怎么办?

带参数的函数:

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

#函数调用
str_len = mylen("hello")
print('str_len : %s'%str_len)

咱们告诉mylen函数要计算的字符串是谁,这个过程叫作传递参数,简称传参,调用函数

时传递的这个“hello”和定义函数的s就是参数

实参和形参

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

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

传递多个参数

参数能够传递多个,多个参数之间用逗号分割。

def mymax(x,y):
	"""比较两个数的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(9,99)
print(the_max)

正是由于须要传递多个参数,因此才有了下面的参数类型

1.位置参数

按照位置传值:

def mymax(x,y):
	"""比较两个数的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(9,99)
print(the_max)

2.关键字参数

按照关键字传值:

def mymax(x,y):
	"""比较两个数的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(y=99, x=9)
print(the_max)

PS:位置、关键字形式混着用

def mymax(x,y):
	"""比较两个数的大小"""
    the_max = x if x > y else y
    return the_max

the_max = mymax(9, y=99)
print(the_max)

正确用法:

  1. 位置参数必须在关键字参数的前面
    2. 对于一个形参只能赋值一次  

3. 默认参数

why?😮将变化比较小的值设置成默认参数

def info(name, sex='男'):
    """打印学生信息"""
    print(name, sex)


info('马克')
info('王富贵', '女')

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

def func(a, l=[]):
    l.append(a)
    print(l)


func(1)
func(2)
func(3)

4. 动态参数(不定长参数)

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

    def mysum(*args):
        """求和"""
        the_sum = 0
        print(args)  # 保存成元组形式
        print(type(args))
    
        for i in args:
            the_sum += i
        return the_sum
    
    
    sum = mysum(10, 20, 30)
    print(sum)
  2. **kwargs:按位置传值多余的参数都由kwargs统一接收,保存成一个字典的形式

    def stu_info(**kwargs):
        print(kwargs)  # 保存成字典
        print(kwargs['name'])
    
    
    stu_info(name='不喜欢马赛克的马克', sex='男')

⭐️总结

函数:

参数:

相关文章
相关标签/搜索