函数与字符串

一.参数
1.不定长参数
(1)在参数名前面的*表示args是一个可变参数(不定长参数)
(2)在调用函数时可以传入0个或多个参数
代码:

def Jocker(*args):
    print(args)
Jocker(100)

运行结果:
(100,) #(元组)

2.导入
注意:导入不可以跨级
代码:
在这里插入图片描述
其他.py文件引用文本中任何东西,如果你不想在其他文件中运行该文件中某些代码,就可以使用“if name == ‘main’ ”

3.全局变量
修改某个变量自身时使用,不修改仅查看,不需要声明
例题:随机点名
代码:

#方法一:
import numpy as np
a = np.random.choice(['ghj','yui','zse','hiu','juh','qwe'])
print ("点到名的是%s"%a)

#运行结果:
#点到名的是juh
def Start():
    import random
    a = ['ghj','yui','zse','hiu','juh','qwe']
    index = random.randint(0,len(a) - 1)
    print(a[index])
Start()

#运行结果:
#ghj

二.字符串
字符串就是由零个或多个字符组成的有限序列。

三.字符串的使用

def main():
    str1 = 'hello, world!'

1.通过len函数计算字符串的长度

print(len(str1))

#运行结果:
#13

2.获得字符串首字母大写的拷贝

print(str1.capitalize())

#运行结果:
#Hello, world!

3.获得字符串变大写后的拷贝

print(str1.upper())

#运行结果:
#HELLO, WORLD!

4.从字符串中查找子串所在位置

 print(str1.find('or'))

#运行结果:
# 8

5.检查字符串是否以指定的字符串开头

print(str1.startswith('He'))
print(str1.startswith('hel'))

#运行结果:
# False
# True

6.检查字符串是否以指定的字符串结尾

print(str1.endswith('!'))

#运行结果;
# True

7.将字符串以指定的宽度居中并在两侧填充指定的字符

str = 'TFBOYS are my idols!'
print(str.center(30, '~'))

#运行结果:
#~~~~~TFBOYS are my idols!~~~~~~

8.将字符串以指定的宽度靠右放置左侧填充指定的字符

str = 'TFBOYS are my idols!'
print(str.rjust(30, ' '))

#运行结果:
#          TFBOYS are my idols!
str2 = 'abc123456'

9.从字符串中取出指定位置的字符(下标运算)

print(str2[2])

#运行结果:
# c

10.字符串切片(从指定的开始索引到指定的结束索引)

print(str2[2:5])

#运行结果:  
# c12

print(str2[2:])
 
#运行结果:
# c123456

print(str2[2::2]) 

#运行结果:
# c246

print(str2[::2])

#运行结果:
# ac246

print(str2[::-1]) 
 
#运行结果:
# 654321cba

print(str2[-3:-1]) 
 
#运行结果:
# 45

11.检查字符串是否由数字构成

print(str2.isdigit())

#运行结果:
# False

12.检查字符串是否以字母构成

print(str2.isalpha()) 

#运行结果:
# False

13.检查字符串是否以数字和字母构成

print(str2.isalnum())

#运行结果:
# True

注:要在程序中保存和操作数据,最常用的方式为:列表、元组、集合和字典。

四.使用列表
1.定义列表,使用下标访问,添加和删除元素

def main():
    list1 = [1, 3, 5, 7, 100]
    print(list1)
    list2 = ['hello'] * 5
    print(list2)
    # 计算列表长度(元素个数)
    print(len(list1))
    # 下标(索引)运算
    print(list1[0])
    print(list1[4])
    # print(list1[5])  # IndexError: list index out of range
    print(list1[-1])
    print(list1[-3])
    list1[2] = 300
    print(list1)
    # 添加元素
    list1.append(200)
    list1.insert(1, 400)
    list1 += [1000, 2000]
    print(list1)
    print(len(list1))
    # 删除元素
    list1.remove(3)
    if 1234 in list1:
        list1.remove(1234)
    del list1[0]
    print(list1)
    # 清空列表元素
    list1.clear()
    print(list1)

2.列表切片操作

def main():
    fruits = ['grape', 'apple', 'strawberry', 'waxberry']
		fruits += ['pitaya', 'pear', 'mango']
	# 循环遍历列表元素
    for fruit in fruits:
        print(fruit.title(), end=' ')
    print()
    # 列表切片
    fruits2 = fruits[1:4]
    print(fruits2)
    # fruit3 = fruits  # 没有复制列表只创建了新的引用
    # 可以通过完整切片操作来复制列表
    fruits3 = fruits[:]
    print(fruits3)
    fruits4 = fruits[-3:-1]
    print(fruits4)
    # 可以通过反向切片操作来获得倒转后的列表的拷贝
    fruits5 = fruits[::-1]
    print(fruits5)

3.列表排序

def main():
    list1 = ['orange', 'apple', 'zoo', 'internationalization', 'blueberry']
    # 默认排序是升序
    list2 = sorted(list1)
    # sorted函数返回列表排序后的拷贝不会修改传入的列表
    # 函数的设计就应该像sorted函数一样尽可能不产生副作用
    list3 = sorted(list1, reverse=True)
    # 通过key关键字参数指定根据字符串长度进行排序而不是默认的字母表顺序
    list4 = sorted(list1, key=len)
    print(list1)
    print(list2)
    print(list3)
    print(list4)
    # 给列表对象发出排序消息直接在列表对象上进行排序
    list1.sort(reverse=True)
    print(list1)

4.创建列表

import sys


def main():
  	# f = [x for x in range(100) if x % 2==0]
    f = [x for x in range(1, 10)]
    print(f)
    f = [x + y for x in 'ABCDE' for y in '1234567']
    print(f)
    # f = [x + y for x in 'ABCDE' if x == 'A' for y in '1234567']
		# print(f)
    # 用列表的生成表达式语法创建列表容器
    # 用这种语法创建列表之后元素已经准备就绪所以需要耗费较多的内存空间
    f = [x ** 2 for x in range(1, 1000)]
    print(sys.getsizeof(f))  # 查看对象占用内存的字节数
    print(f)
    # 请注意下面的代码创建的不是一个列表而是一个生成器对象
    # 通过生成器可以获取到数据但它不占用额外的空间存储数据
    # 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
    f = (x ** 2 for x in range(1, 1000))
    print(sys.getsizeof(f))  # 相比生成式生成器不占用存储数据的空间
    print(f)
    for val in f:
        print(val)

五.使用元组
1.元组中的元素是无法修改的。故不需要对元素进行添加、删除、修改的时候,可以考虑使用元祖,或者一个方法要返回多个值,也会选择元组。
2.元组在创建时间和占用的空间上面都优于列表。
代码:

def main():
    # 定义元组
    t = ('骆昊', 38, True, '四川成都')
    print(t)
    # 获取元组中的元素
    print(t[0])
    print(t[3])
    # 遍历元组中的值
    for member in t:
        print(member)
    # 重新给元组赋值
    # t[0] = '王大锤'  # TypeError
    # 变量t重新引用了新的元组原来的元组将被垃圾回收
    t = ('王大锤', 20, True, '云南昆明')
    print(t)
    # 将元组转换成列表
    person = list(t)
    print(person)
    # 列表是可以修改它的元素的
    person[0] = '李小龙'
    person[1] = 25
    print(person)
    # 将列表转换成元组
    fruits_list = ['apple', 'banana', 'orange']
    fruits_tuple = tuple(fruits_list)
    print(fruits_tuple)

六.使用集合
1.集合不允许有重复元素,可以进行交,并,差等运算。
代码:

def main():
    set1 = {1, 2, 3, 3, 3, 2}
    print(set1)
    print('Length =', len(set1))
    set2 = set(range(1, 10))
    print(set2)
    set1.add(4)
    set1.add(5)
    set2.update([11, 12])
    print(set1)
    print(set2)
    set2.discard(5)
    # remove的元素如果不存在会引发KeyError
    if 4 in set2:
        set2.remove(4)
    print(set2)
    # 遍历集合容器
    for elem in set2:
        print(elem ** 2, end=' ')
    print()
    # 将元组转换成集合
    set3 = set((1, 2, 3, 3, 2, 1))
    print(set3.pop())
    print(set3)
    # 集合的交集、并集、差集、对称差运算
    print(set1 & set2)
    # print(set1.intersection(set2))
    print(set1 | set2)
    # print(set1.union(set2))
    print(set1 - set2)
    # print(set1.difference(set2))
    print(set1 ^ set2)
    # print(set1.symmetric_difference(set2))
    # 判断子集和超集
    print(set2 <= set1)
    # print(set2.issubset(set1))
    print(set3 <= set1)
    # print(set3.issubset(set1))
    print(set1 >= set2)
    # print(set1.issuperset(set2))
    print(set1 >= set3)
    # print(set1.issuperset(set3))

七.使用字典
1.字典可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。、
2.字典的一切操作都是通过键名操作键值。
3.字典是无序的,没有索引操作,除非转换成有序字典
代码:

dict = {key:value}
def main():
    scores = {'骆昊': 95, '白元芳': 78, '狄仁杰': 82}
    # 通过键可以获取字典中对应的值
    print(scores['骆昊'])
    print(scores['狄仁杰'])
    # 对字典进行遍历(遍历的其实是键再通过键取对应的值)
    for elem in scores:
        print('%s\t--->\t%d' % (elem, scores[elem]))
    # 更新字典中的元素
    scores['白元芳'] = 65
    scores['诸葛王朗'] = 71
    scores.update(冷面=67, 方启鹤=85)
    print(scores)
    if '武则天' in scores:
        print(scores['武则天'])
    print(scores.get('武则天'))
    # get方法也是通过键获取对应的值但是可以设置默认值
    print(scores.get('武则天', 60))
    # 删除字典中的元素
    print(scores.popitem())
    print(scores.popitem())
    print(scores.pop('骆昊', 100))
    # 清空字典
    scores.clear()
    print(scores)

补充:
匿名函数格式:

lambda x,y :print(x,y)(100,10)
#  自变量         应变量
day01.py
  def A():
  	print('hahaha')
 	print(_name_)
  	if _name_ = '_main_'
  A()  	 	  	

练习:
1.获取网页中a>下的http

import requests
response = requests.get('http://news.baidu.com')
response.encoding = 'utf8'
HTML = response.text
for i in HTML.split('\n'):
    if '<a' in i and 'http' in i:
        splits = i.split('"')
        for s in splits:
            if 'http' in s and "background-image" not in s:
                print(s)    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值