1.什么是函数:

可重复使用的,用来实现单一,或相关联功能的代码段。

函数分为内置函数和自定义函数,这里先讲自定义函数

2.如何定义函数:

#语法
def 函数名(参数1,参数2,参数3,...):
'''注释'''
函数体
return 返回的值

注:函数必须先定义才能使用,定义阶段不执行代码只检测语法.意思就是语法错误在定义阶段就会检测出来,代码的逻辑错误只有在执行时才会提示.

3.定义函数的三种形式

无参:用于执行一些打印等操作,不需要参数传进去

有参:需要根据传进去的参数进行运算

空函数:用于设计代码结构

#     1.无参函数
# def foo():
# print('from foo')
# foo()
# # 2.有参函数
# def bar():
# print(x,y)
# bar(1,2)
# # 3,空函数
# def func():
# pass

4.函数调用

函数调用就是函数名加个()即可

4.1调用函数的三种形式:

# 1.语句形式
# def foo():
# print('from foo')
# foo()
#
# 2.表达式形式
# def foo(x,y):
# res = x+y
# return res
# res = foo(1,2) # 3.可以当做参数传给另外一个函数
# def max2(x,y):
# if x>y:
# return x
# else:
# return y
# res = max2(max2(1,2),3)
# print(res)

4.2函数的返回值

1.返回值没有类型限制

2.返回值没有个数限制

注:返回多个值的结果就是返回一个元组,0个值返回为None

return是函数结束的标准,可以有多个return但只执行一次

# def f1():
# print('111')
# return 1
# print('222')
# return 2
# print('333')
# return 3
#def f1()
#只执行 print('111')

4.3函数的参数

函数的参数分为形参和实参.形参即为变量名,实参为变量值,在函数调用时,把值绑定到变量名上,在函数调用结束后,解除绑定

形参与实参的具体分类(重点)

1.位置参数

1.1位置形参

  在定义函数阶段按照从左到右的顺序定义的形参.   注:按位置定义的形参必须被传值,多一个不行,少一个也不行

# def foo(x,y)
# print(x,y)
#
# foo(1,2) #正确
# foo(1,2,3) #错误

1.2位置实参

  在调用函数阶段按照从左到右的顺序依次传入的值.

2.关键字参数

  关键字实参:在调用函数阶段,按照key=value的形式指名道姓的为指定值传值

  注:可以完全打乱顺序,仍可以为指定的形参传值

    可以混合使用位置实参和关键字实参,但必须注意(1)位置实参必须放在关键字实参前面(2)不能对一个形参重复赋值

def foo(name,age):
print(name,age) foo('zfj',18)
foo(age=18,name='egon')
# foo(name='zfj',18)#报错
# foo('zfj', age=18)

3.默认参数

  指的是在定义阶段就已经为某个形参赋值了,该形参称之为有默认值的形参

注意:1.在定义阶段就已经被赋值,意味着在调用阶段就可以直接使用,默认参数

   2.位置形参应该放到默认形参前面

   3.默认参数的值,通常应该为不可变类型

def foo(x,y=2):
print(x,y)
foo(1)#1,2
foo(1,3)#1,3

4.可变长度参数

  站在实参的角度,参数长度可变指的是在调用函数时,传入的实参的值个数不固定

  4.1在形参中带“*”:会将调用函数时溢出的位置实参保存为元组的形式,然后赋值给*后的变量

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

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

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

  4.3在实参中带“*”:在传值前先被打散成位置实参,然后再进行赋值

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

  4.4在实参中带“**”:在传值前先被打散成关键字实参,然后再进行赋值

def foo(x,y,z):
print(x,y,z)
foo(1,**{'y':2,'z':1})#1 2 1

5.命名关键字参数

放到*与**之间的参数称为命名关键字参数。函数的调用者可以传入任意不受限制的关键字参数

注意:命名关键字参数必须按照key = value的形式传值

补充:

在形参中带*与**的,*后的变量名应该为args,**后应该是kwargs

# 当我们想要将传给一个函数的参数格式原封不动地转嫁给其内部的一个函数,应该使用下面这种格式
def bar(x,y,z):
print(x,y,z)
def wrapper(*args,**kwargs):
bar(*args,**kwargs)
wrapper(1,2,z=3) #虽然调用的是wrapper,但是要遵循的却是bar的参数标准

python-函数入门(一)的更多相关文章

  1. Python函数(入门6)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407970.html 本文出自:[Edwin博客园] Python函数 1. Python之调用函数 pri ...

  2. python函数入门

    知识内容: 1.函数的作用 2.函数的定义与调用 3.函数的返回值 4.函数的参数 5.局部变量与全局变量 6.作用域 一.函数的作用 1.复用代码 将可能重复执行的代码封装成函数,并在需要执行的地方 ...

  3. python函数入门到高级

    函数的定义: def test(x): "The function definitions" x+=1 return x def:定义函数的关键字 test:函数名 ():内可定义 ...

  4. Python——函数入门(三)

    一.变量作用域 当程序定义一个变量时,这个变量是有它的作用范围的,变量的作用范围称为变量的作用域.根据变量的位置,分为两种: 局部变量:局部变量就是在函数中定义的变量,包括参数,都是局部变量,局部离开 ...

  5. Python——函数入门(二)

    一.函数的参数 我们在定义函数时,可以定义形式参数(简称形参),这些形参的值在函数调用的时候才会确定,形参的值由调用者负责传入. 1.关键字参数 在Python中,函数的参数名并不是没有意义的,在调用 ...

  6. Python——函数入门(一)

    一.理解函数 举一个例子,当我们需要重复使用一个功能的时候,不可能每次都去复制一次代码,这个时候就需要用到函数了,所谓的函数,简单来说就是给函数取一个名字,当需要用到这个功能的时候,就可以通过这个名字 ...

  7. 实验与作业(Python)-02 Python函数入门与温度转换程序

    截止日期 实验目标 学会定义函数,使用函数.学会导入在某个文件中定义的函数. input获得值,然后通过eval或者int.float将其转换为相应的类型. 学会使用列表:访问列表.append.遍历 ...

  8. 实验与作业(Python)-02 Python函数入门与温度转换程序(函数、input、eval、int、float、列表)

    截止日期 实验目标 学会定义函数,使用函数.学会导入在某个文件中定义的函数. input获得值,然后通过eval或者int.float将其转换为相应的类型. 学会使用列表:访问列表.append.遍历 ...

  9. python之函数入门

    python之函数入门 一. 什么是函数 二. 函数定义, 函数名, 函数体以及函数的调用 三. 函数的返回值 四. 函数的参数 五.函数名->第一类对象 六.闭包 一,什么是函数 函数: 对代 ...

  10. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

随机推荐

  1. select实现简单TCP通信(ubuntu 18.04)

    一.服务器程序(server.c) #include <stdio.h> #include <unistd.h> #include <stdlib.h> #incl ...

  2. 十一、移植优化---CONFIG 优化进 menuconfig(2)

    11.3 jz2440.h 中的剩余宏移植 11.3.1 CONFIG_SYS_TEXT_BASE CONFIG_SYS_TEXT_BASE:设置系统代码段的基地址,设为 0x0:menuconfig ...

  3. Linux静默安装matlab

    对linux系统不是很熟,所有装起来有点费劲.来来回回折腾了二三天,查了很多攻略,但按照步骤老是报错,大体上各人设备不同.系统不同.环境设置不同,总是会多多少少略有差异. 一 基本配置 linux系统 ...

  4. (15)DeleteColumnsMakeSortedIII

    一.问题描述 给定一个字符串形的数组,求最小的删除数目,使得删除后的字符串是字典型有序的. 二.思路Code package algorithm; /** * Created by adrian.wu ...

  5. localStorage用法

    引用:https://www.cnblogs.com/st-leslie/p/5617130.html const STORAGE_KEY = 'todos-vuejs'; export defaul ...

  6. Python非空即真,非零即真

    非空即真,非零即真 #1. 非空即真(只要输入不为空就是真) #username =''(空字典.空字符串.空元组都算空) # a= '' # b=[] # c={} # d=None (返回值是No ...

  7. axios 在Vue全局引入的方法

    在main.js中: import axios form axios Vue.prototype.$axios = axios 组件中使用: submitFrom () { this.$axios.g ...

  8. stega -- Pcat老入群题

    stega -- Pcat老入群题 Pcat师傅的题果然给力,就是看着wp也是琢磨了半天. WP地址:http://mp.weixin.qq.com/s/T9jJLACiZNB6FR226IjmEA ...

  9. 20165237 2017-2018-2 《Java程序设计》第3周学习总结

    20165237 2017-2018-2 <Java程序设计>第3周学习总结 教材学习内容总结 1.面向机器语言:类如汇编语言. 2.面向过程语言:类如C语言(但是相当于说话缺少主语). ...

  10. OsWatcher 使用详解

    软件下载地址: https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=520996062954556&id=30113 ...