zoukankan      html  css  js  c++  java
  • 函数

    目录

      1.什么是函数
      具备某一功能的工具=>函数
      工具的使用:
      实现准备好的工具
      =>函数定义
      遇到应用场景拿来就用
      >函数的调用
      2.为什么要有函数
      1.程序的组织结构不清晰,可读性差
      2.如果要用到重复的功能,只能拷贝功能的实现代码=>代码冗余
      3.可扩展性差
      3.如何用函数
      函数的使用原则:先定义,后调用

      定义函数:
      	def 函数名(参数1,参数2,....):
      	"""文档注释"""
      	代码1
      	代码2
      	代码3
      	...
      	return 返回值
      调用函数:
      	函数名(值1,值2,....)
      

      一.函数的基本使用
      1.定义函数:申请内存空间把函数体代码保存下来,然后把内存地址绑定给函数名=>函数名=函数的内存地址

      def func():
      	print("*"*10)
      	print("hello")
      	print("*"*10)
      print(func)
      

      2.调用函数:函数名()=>函数的内存地址(),会触发函数体代码的运行
      func()
      二,定义函数的三种格式
      2.1:无参函数

      def login():
      	inp_name = input("your name:).strip()
      	inp_pwd = input("your pwd:).strip()
      	if inp_name == 'egon' and inp_pwd == '123':
      		print('login successful')
      	else:
      		print('login error')
      login()
      

      2.2,有参函数

      def max1(x,y)
      	if x > y:
      		print(x)
      	else:
      		print(y)
      max1(1,2)
      

      2.3空函数

      def func()
      	pass
      

      三.函数的调用
      return:
      函数内可以有多个return,但只要执行一次函数就会立刻结束,
      并把return后的值当做本次调用的结果返回.
      函数可以有三种形式的返回值
      1.return 值:返回的就是指本身
      2.return 值1,值2,值3: 返回的是一个元祖
      3.没有return: 默认返回的是None

      三.函数的调用
      return:
      函数内可以有多个return,但只要执行一次函数就会立刻结束,
      并把return后的值当做本次调用的结果返回.
      函数可以有三种形式的返回值
      1.return 值:返回的就是指本身
      2.return 值1,值2,值3: 返回的是一个元祖
      3.没有return: 默认返回的是None

      def max2(x,y):
      	if x > y:
      		return x
      	else:
      		return y
      
      res = max2(1,2)
      print(res*12)
      

      四,函数调用的三种格式
      4.1语句形式:单纯的调用一下函数就完了

      def sayhi(s,n):
          # s = '-'
          # n = 20
          print(s*n)
          print('hello')
          print(s*n)
      
      sayhi('*',30)
      

      4.2表达式形式

      def max2(x,y):
          if x > y:
              return x
          else:
              return y
      
      res=max2(11,22) * 12
      print(res)
      

      4.3可以把函数的调用当做值传给宁外一个函数
      print(max2(11,22))

      总结:
      函数的使用一定要分两个阶段去看:
      1,定义阶段:只检测语法,不执行代码
      2,调用阶段:执行函数体代码
      如果发生语法错误 ,定义阶段就会立马检测出来

      def func():
      	print('hello
      

      如果发生的不是语法错误,而是逻辑错误,只能在调用阶段检测到:

      如果发生的不是语法错误,而是逻辑错误,只能在调用阶段检测到:

      def func():
      	xxx
      func()
      
      示范1:
      def bar():
          print('from bar')
      
      def foo():
          print('from foo')
          bar()
      
      foo()
      示范2:
      def foo():
          print('from foo')
          bar()
      
      def bar():
          print('from bar')
      
      
      foo()
      

      一, 函数的参数分为两大类:
      1, 形参: 在定义函数是, 括号内定义的变量名, 称之为形式参数, 简称形参 = > 变量名

      def func(x, y):
      	x = 1
      	y = 2
      
      
      print(x)
      print(y)
      

      2, 实参: 在调用函数是, 括号内传入的值, 称之为实际参数, 简称实参 = > 变量值
      func(1, 2)

      二: 在python中参数的种类
      1, 位置参数:
      位置参数: 在函数定义阶段按照从左到右的顺序依次定义形参(变量名), 称之为位置形参
      特点: 必须被传值

      def func(x, y):
      	print(x, y)
      
      func(1, 2)
      func(1)  # 少一个不行
      func(1, 2, 3)  # 多一个也不行
      

      2, 位置实参: 在函数调用阶段按照从左到右的顺序依次定义实参(传入的变量值), 称之为位置实参
      特点: 按照位置传值, 一一对应
      func(1, 2, 3, 4, 5, 6)

      3, 关键字实参: 在函数调用阶段按照key:value的形式为指定的形参名传值, 该形式称之为关键字实参
      特点: 在传值时可以完全打乱顺序, 但是任然能够指名道姓的为指定形参传值

      def func(name, age):
      	print(name, age)
      
      
      func("egon", 17)
      func(age=17, name="egon")
      

      注意: 可以混用位置实参与关键字实参
      但是1, 位置实参必须放在关键字实参前面
      2, 不能为同一个形参赋值

      def func(name, age, salary):
      	print(name)
      	print(age)
      	print(salary)
      
      
      func('egon', salary=3.1, age=18)
      func('egon', salary=3.1, 18)  # 错误
      func('egon', 18, salary=3.1)  # 错误
      
      func('egon', 18, age=19, salary=3.3)
      

      默认形参: 在函数定义阶段就已经为某个形参赋值, 该形参称之为有默认值的形参, 简称默认形参
      特点: 定义阶段就已经被赋值意味着在函数调用阶段可以不用为其赋值

      def func(x, y=2):
      	print(x, y)
      
      
      func(1)
      func(1, 222)
      

      注意:
      1, 默认形参应该放在位置形参后面

      def func(y=2, x):
      	pass  # 错误
      

      默认形参的值通常应该是不可变类型

      # def func(name,hobby,hobbies=[]):
      
      #     hobbies.append(hobby)
      
      #     print("%s 的爱好是:%s" %(name,hobbies))
      
      #
      
      # func("egon",'play')
      
      # func('lili','music')
      
      # func("jack",'read')
      
      def func(name, hobby, hobbies=None):
      	if hobbies is None:
      		hobbies = []
      	hobbies.append(hobby)
      	print("%s 的爱好是:%s" % (name, hobbies))
      
      
      func("egon", 'play')
      func('lili', 'music')
      func("jack", 'read')
      

      3.默认形参的值只在函数定义阶段被赋值依次,函数定义之后的改变对默认形参没有影响

      m=333
      def func(x,y=m): # y=333
          print(x,y)
      
      m=44444
      func(1)
      
      def register(name,age,gender='male'):
          print(name)
          print(age)
          print(gender)
      
      register('egon',18,)
      register('jack',20,)
      register('tom',21,)
      register('lili',18,'female')
      
    • 相关阅读:
      1105 Spiral Matrix (25分)(蛇形填数)
      1104 Sum of Number Segments (20分)(long double)
      1026 Table Tennis (30分)(模拟)
      1091 Acute Stroke (30分)(bfs,连通块个数统计)
      1095 Cars on Campus (30分)(排序)
      1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
      堆以及堆排序详解
      1089 Insert or Merge (25分)
      1088 Rational Arithmetic (20分)(模拟)
      1086 Tree Traversals Again (25分)(树的重构与遍历)
    • 原文地址:https://www.cnblogs.com/lgh8023/p/13332791.html
    Copyright © 2011-2022 走看看