函数基础

### 函数简介

- 定义:具有特定功能的一段代码
- 优点:
- 可以减少代码的重复书写
- 可以将功能的实现着和使用者分开,可以提高开发效率
- 分类:
- 库函数:print、input、type等
- 自定义:用户自己封装的函数 ### 函数使用 - 函数定义格式 ```python
def 函数名([参数列表]):
函数体
``` > []表示参数是可选的,参数可以有,也可以没有,有也可以是一个或多个。 - 函数名: - 像变量名一样,只要符合标识符命名规范即可。 - 函数调用: - 函数定义后不会执行,只有调用后才会执行
- 调用格式:`函数名([参数])` ### 函数分类 - 说明:按照函数的参数与返回值 - 示例: ```python
# 无参无返回值
def print_ten_hello():
for i in range(10):
print('Hello world!') # 带参无返回值
def print_n_hello(n=10):
for i in range(n):
print('Hello world!') # 带参有返回值
def add(a, b):
return a + b
``` > return:返回函数的返回值,一旦执行,函数立即结束。 ### 函数参数 - 形参:形式参数,就是写在函数定义处的参数。 - 实参:实际参数,就是在函数调用时传递的参数。 - 位置参数:函数定义时没有默认值的参数,也叫必传参数。调用时的实参与定义处的形参一一对应 - 默认参数:函数定义时有默认值的参数,调用时可以不传。默认参数必须放在最后。 - 关键字参数:函数调用时指定参数的名字,参数的位置就无所谓了。 - 可变长度参数: ```python
# 可变长度参数
def var_len_args(a, b, *args, **kwargs):
print(a, b)
# 是一个元组,存放多传的位置参数
print(args)
# 是一个字典,存放多传的关键字参数
print(kwargs) var_len_args(2, 3, 4, 5, name='二狗', age=10)
``` - *的使用 ```python
def show(a, b):
print(a, b)
``` ```python
show(2, 3) lt = [2, 3] <div class="se-preview-section-delimiter"></div> #show(lt[0], lt[1]) <div class="se-preview-section-delimiter"></div> #与上面的方式等价,*相当于将列表中元素展开位置参数的形式 show(*lt) def show2(aa, bb): print(aa, bb) d = {'aa': 123, 'bb': 456} show2(aa=d['aa'], bb=d['bb']) 与上面的式子等价,相当于将字典中的元素展开成关键字参数的形式 show2(**d) <div class="se-preview-section-delimiter"></div>

“`

函数进阶

  • 函数定义的位置是随意的吗?

    • 不是,一定要先定义再调用,也就是调用一定要在定义之后。
  • 函数的名字可以相同吗?
    • 不可以,若出现同名函数,后者会覆盖前者。
  • 函数中能否再定义一个函数?
    • 可以,函数内部定义的函数叫内部函数,它是很多高级功能的基础。

变量作用域

  • 块级作用域

    if True:
    a = 10 # 变量没有块级作用域 print(a)
  • 局部作用域

    def test():
    name = '二狗' # 局部变量:定义在函数内部的变量,拥有局部作用域 # print(name)
  • 全局作用域


    # 全局变量:定义在函数外部的变量,拥有全局的作用域 num = 20 def show():
    # 全局变量在函数内部只能使用,不能更改
    # 局部变量与外部变量同名,局部优先
    # 若果想在函数中修改全局变量,需要声明
    global num
    num = 10
    print(num) show()
    print(num)
  • nonlocal使用

    def wai():
    n = 100 def nei():
    # 声明使用非本地变量:外部函数的局部变量
    nonlocal n
    n = 200
    print(n) nei()
    print(n) wai()

常用函数

  • 内置函数(无需导入)

    print:打印、输出
    input:输入
    type:类型
    len:统计元素个数
    range:产生连续的整数对象
    enumerate:枚举可迭代对象
    ord:字符转换为ASCII
    chr:ASCII转换为字符
    id:获取变量地址,不要纠结
    abs:求绝对值 类型转换:
    int、float、complex、set、list、str、dict、tuple max:求最大值(多个参数或一个容器对象)
    min:求最小值
    sum:容器对象元素求和
    pow:求幂
    round:四舍五入 hex:16进制
    oct:八进制
    bin:二进制
  • 模块函数(需要导入)

    '''
    import time while True:
    print('Hello world!')
    time.sleep(1)
    ''' '''
    import math print(math.e)
    print(math.pi)
    print(math.ceil(3.1))
    print(math.floor(3.9))
    print(math.sqrt(4))
    print(math.radians(360))
    print(math.degrees(math.pi))
    ''' import sys # 存放了终端运行时的所有参数列表 print(sys.argv)

练习

  • 前面的练习能使用函数封装就封装成函数

  • 终端计算器,完成加减乘除功能

  • import  sys
    def numeration(a,b,c):
    if b == '+':
    return int(a) + int(c)
    elif b == '-':
    return int(a) - int(c)
    elif b == '*':
    return int(a) * int(c)
    elif b == '/':
    return int(a) / int(c)
    print(numeration(sys.argv[1],sys.argv[2],sys.argv[3]))

  • 删除列表中重复的元素

  • lt = [1, 2, 3, 4, 5, 6, 4, 2, 3, 1, 7]
    a = list(set(lt))
    a1 = sorted(a, key=lt.index)
    print(a1)

  • 统计一个字符串中字母、数字及其他字符的个数,返回一个元组


  • #统计一个字符串中字母、数字及其他字符的个数,返回一个元组 def char_count(string):
    len1 = len(string)
    count = 0
    count1 = 0
    count2 = 0
    for i in range(len1):
    x = ord(string[i])
    if (65 <= x <= 90) or (97 <= x <= 122) :
    count += 1
    elif 49 <= x <=57 :
    count1 += 1
    else:
    count2 += 1
    return count,count1,count2
    str = input('请输入字符串:')
    print(char_count(str),type(char_count(str)))

  • 返回一个列表中第二大的数

  • lt = [1,3,5,8,9,7,9,7,1,2,]
    def second_max():
    a = max(lt)
    lt.remove(a)
    b = max(lt)
    return b
    print(second_max()) lt = [1, 3, 2, 8, 9, 7, 6, 5, 4]
    lt.sort()
    print(lt[-2])

  • 完成列表的排序,支持逆序

    def list_sort(lt, reverse = False):
    n = len(lt)
    for i in range(n-1):
    for j in range(i+1,n):
    if reverse :
    if lt[i] < lt[j]:
    lt[i] , lt[j] = lt[j], lt[i]
    else:
    if lt[i] > lt[j]:
    lt[i], lt[j] = lt [j],lt[i]
    lt = [1,3,7,6,9,5,4,7]
    list_sort(lt,reverse=True)
    print(lt)

  • 号码归属地查询:

    • “`

    “`

set = '''5582|1860101|010|北京市|北京联通GSM卡
5583|1860100|010|北京市|北京联通GSM卡
5584|1368141|010|北京市|北京移动神州行卡
5585|1860111|010|北京市|北京联通GSM卡
5586|1358198|010|北京市|北京移动动感地带卡
5587|1361139|010|北京市|北京移动预付费卡
5588|1361138|010|北京市|北京移动神州行卡
5591|1360110|010|北京市|北京移动全球通卡
5748|1364110|010|北京市|北京移动神州行卡
10186|1581584|020|广东省广州市|广东移动全球通卡
15046|1391897|021|上海市|上海移动全球通卡
17250|1502207|022|天津市|天津移动全球通卡
21137|1345272|023|重庆市万州|重庆移动大众卡
22700|1347812|024|辽宁省沈阳市|辽宁移动大众卡
24256|1377065|025|江苏省南京市|江苏移动全球通卡
26360|1898606|027|湖北省武汉市|湖北电信CDMA卡
28709|1860802|028|四川省成都市|四川联通GSM卡
30641|1552961|029|陕西省西安市|陕西联通GSM卡
31700|1563007|0310|河北省邯郸市|河北联通GSM卡
33360|1583396|0311|河北省石家庄市|河北移动全球通卡
34825|1508122|0312|河北省保定市|河北移动全球通卡
35363|1551235|0313|河北省张家口|河北联通GSM卡
37700|1331326|0316|河北省廊坊市|河北电信CDMA卡
43500|1350358|0358|山西省吕梁市|山西移动全球通卡
43908|1553625|0359|山西省运城市|山西联通GSM卡
44521|1335360|0370|河南省商丘市|河南电信CDMA卡
50078|1509369|0378|河南省开封市|河南移动全球通卡
53603|1583981|0398|河南省三门峡|河南移动全球通卡
53916|1335897|0410|辽宁省铁岭市|辽宁电信CDMA卡
55248|1554254|0411|辽宁省大连市|辽宁联通GSM卡
58618|1374272|0427|辽宁省盘锦市|辽宁移动全球通卡
58932|1554183|0429|辽宁省葫芦岛|辽宁联通GSM卡
60268|1340475|0431|吉林省长春市|吉林移动大众卡''' <div class="se-preview-section-delimiter"></div> #保存信息的字典
guishudi = {} <div class="se-preview-section-delimiter"></div> #按照换行进行切割
lt = set.splitlines() <div class="se-preview-section-delimiter"></div> #遍历处理
for info in lt :
#按照‘|’进行切割
info_list = info.split('|')
#保存有效信息到字典
guishudi[info_list[1]] = info_list[-1]
while True:
phone = input('请输入号码的前七位:')
if len(phone) < 7:
print('号码尾数不够')
continue
#提取前七位
phone = phone [:7]
info = guishudi.get(phone,'号码有误')
print(info) <div class="se-preview-section-delimiter"></div>

“`

python学习总结 --函数基础的更多相关文章

  1. Python学习笔记-函数基础

    函数基础 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 为什么使用函数:减少重复代码.使程序变的可扩展使程序变得易维护 1.定义一个函数 #定 ...

  2. Python学习day9 函数Ⅰ(基础)

    函数Ⅰ(基础) 三目运算 基本结构 v =  前面  if 条件 else 后面    #条件为真v=前面,条件为假v=后面.​#等同于if 条件: v = '前面'else:    v = '后面' ...

  3. python学习日记(函数基础)

    修改文件(原理)--回顾 #修改文件(原理) with open('name','r',encoding='utf-8') as f,\ open('password','w+',encoding=' ...

  4. python学习之函数基础

    第一个python函数: >>> def func_1(): ... print 'hello python' ... >>> func_1() hello pyt ...

  5. Python学习day16-模块基础

    <!doctype html>day16 - 博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { ...

  6. Python学习day12-函数基础(2)

    <!doctype html>day12博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { pos ...

  7. Python学习day11-函数基础(1)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  8. Python学习课程零基础学Python

    python学习课程,零基础Python初学者应该怎么去学习Python语言编程?python学习路线这里了解一下吧.想python学习课程?学习路线网免费下载海量python教程,上班族也能在家自学 ...

  9. Python学习笔记之基础篇(-)python介绍与安装

    Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...

随机推荐

  1. 2017.10.15 解析Java中抽象类和接口的区别

    (1)在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制. 正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和 ...

  2. 你不得不掌握的thinkphp5

    thinkphp官网在去年的时候发布了tp的颠覆版本thinkphp5,tp5确实比之前的版本好用了很多,增加了很多的一些特性,它采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖, ...

  3. oracle: listener.ora 、sqlnet.ora 、tnsnames.ora的配置及例子

    1.解决问题:TNS或者数据库不能登录.      最简单有效方法:使用oracle系统提供的工具 netca 配置(把原来的删除掉重新配置)     $netca  2.然而,仍有疑问:如何指定'l ...

  4. URL中传递JSON数据

    有关于JSON如何在前后之间进行传递,转换成对象等操作,请查看  C#Json数据交互   (这篇文章主要介绍了如何转化Json格式的数据,以及如何使用) 我们在URL中传递数据一般都是 XX.asp ...

  5. RHEL7.X安装12.2RAC时root.sh错误CLSRSC-400的解决方案

    问题现象: [root@ora12c ghome]# /opt/oracle/ghome/root.sh Performing root user operation. The following e ...

  6. 利用deadline_timer实现定时器Timer

    // 类似QTimer的定时器 class Timer { typedef void(* handler)(); public: Timer() : m_millseconds() , m_timer ...

  7. 爬虫学习(十三)——xpath基础学习

    lxml的作用 lxml是HTML.xml的解析器,主要的功能是如何解析和提取HTML和xml数据 lxml和正则一样,也是使用C来实现的,是一款高性能的python HTML/xml解析器,我们可以 ...

  8. spring cloud 学习之服务消费者(rest+ribbon)

    学习自 http://blog.csdn.net/forezp/article/details/81040946 方志朋的博客 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于h ...

  9. Linux下常用压缩 解压命令与压缩比率对比

    常用的格式有:tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar只是打包动作,相当于归档处理,不做压缩:解压也一样,只 ...

  10. 第三章 文件 I/O

    3.1 引言 先说明可用的文件 I/O 函数:open.read.write.close,然后说明不同缓冲区长度对read和write函数的影响. 本章所说的函数经常被称为不带缓冲的 I/O (unb ...